Vue Test Utils предоставляет мощный инструмент для юнит-тестирования
компонентов Vue, позволяя эмулировать работу компонента в различных
состояниях через опции монтирования. Основные опции —
props, data, computed и
methods — дают контроль над состоянием и поведением
компонента без необходимости изменять исходный код.
propsОпция props позволяет передавать свойства компоненту при
его монтировании. Это имитация того, как компонент будет использоваться
в реальном приложении.
import { mount } from '@vue/test-utils'
import MyComponent from '@/components/MyComponent.vue'
const wrapper = mount(MyComponent, {
props: {
title: 'Пример заголовка',
isActive: true
}
})
console.log(wrapper.props().title) // 'Пример заголовка'
console.log(wrapper.props().isActive) // true
Особенности использования props:
setProps:await wrapper.setProps({ title: 'Новый заголовок' })
expect(wrapper.text()).toContain('Новый заголовок')
dataОпция data используется для установки начального
состояния реактивных данных компонента. Она должна быть функцией,
возвращающей объект с данными.
const wrapper = mount(MyComponent, {
data() {
return {
counter: 10,
visible: false
}
}
})
expect(wrapper.vm.counter).toBe(10)
expect(wrapper.vm.visible).toBe(false)
Ключевые моменты:
props.wrapper.setData():await wrapper.setData({ counter: 20 })
expect(wrapper.vm.counter).toBe(20)
computedОпция computed позволяет переопределять вычисляемые
свойства компонента на время теста. Это полезно, когда необходимо
контролировать результат вычислений без изменения логики компонента.
const wrapper = mount(MyComponent, {
computed: {
fullName: () => 'Тестовое Имя'
}
})
expect(wrapper.vm.fullName).toBe('Тестовое Имя')
Особенности:
methodsОпция methods позволяет переопределять методы компонента
на время теста. Это даёт возможность контролировать поведение, особенно
если методы зависят от сложной логики или асинхронных вызовов.
const wrapper = mount(MyComponent, {
methods: {
fetchData: jest.fn(() => 'заглушка')
}
})
wrapper.vm.fetchData()
expect(wrapper.vm.fetchData).toHaveBeenCalled()
Применение methods:
props и data для
создания сложных сценариев поведения.Опции props, data, computed и
methods можно комбинировать для полного контроля над
состоянием компонента. Например, можно задать исходные данные, передать
пропсы и подменить метод для проверки определенного сценария:
const wrapper = mount(MyComponent, {
props: { isActive: true },
data() { return { counter: 0 } },
computed: { doubled: vm => vm.counter * 2 },
methods: { increment: jest.fn() }
})
await wrapper.setData({ counter: 5 })
expect(wrapper.vm.doubled).toBe(10)
wrapper.vm.increment()
expect(wrapper.vm.increment).toHaveBeenCalled()
Главная идея: эти опции позволяют изолировать компонент, контролировать его внутреннее состояние и поведение, а также тестировать реакции на разные входные данные без необходимости модифицировать сам компонент. Это делает тесты более стабильными и предсказуемыми.
Эффективное использование опций монтирования — основа качественного тестирования Vue-компонентов, позволяющая создавать детальные и управляемые сценарии для всех возможных состояний.