В Vue Test Utils props компонента можно динамически
изменять во время тестирования с помощью метода setProps.
Этот подход позволяет проверять реактивность компонентов и их поведение
при изменении входных данных.
import { mount } from '@vue/test-utils'
import MyComponent from '@/components/MyComponent.vue'
const wrapper = mount(MyComponent, {
props: {
title: 'Начальный заголовок'
}
})
В этом примере компонент монтируется с пропсом
title.
setPropsМетод setProps принимает объект, где ключи — имена
пропсов, а значения — новые данные. После вызова setProps
Vue автоматически обновляет компонент и пересчитывает все реактивные
зависимости.
await wrapper.setProps({ title: 'Обновлённый заголовок' })
expect(wrapper.text()).toContain('Обновлённый заголовок')
Важно помнить, что setProps асинхронен, так как
изменения пропсов вызывают реактивное обновление DOM. Использование
await гарантирует, что все обновления завершены перед
проверкой состояния компонента.
Если родительский компонент передаёт пропсы дочернему компоненту,
setProps также обновляет значения для дочернего.
const Parent = {
template: `<Child :message="message"/>`,
components: { Child },
props: ['message']
}
const wrapper = mount(Parent, {
props: { message: 'Привет' }
})
await wrapper.setProps({ message: 'Пока' })
expect(wrapper.findComponent(Child).props('message')).toBe('Пока')
Это позволяет тестировать взаимодействие между компонентами без повторного монтирования.
setPropssetProps
может обновлять только те пропсы, которые объявлены в компоненте. Любая
попытка добавить новый пропс через setProps приведёт к
предупреждению Vue.await или nextTick.setProps не изменяет состояние data или
computed, только входные значения через пропсы.v-if,
v-show) и динамическое отображение элементов.setProps позволяет
проверить реакцию на новые значения.const wrapper = mount(MyComponent, {
props: {
count: 0,
active: false
}
})
// Проверка начального состояния
expect(wrapper.text()).toContain('0')
expect(wrapper.classes()).not.toContain('active')
// Изменение пропсов
await wrapper.setProps({ count: 5, active: true })
// Проверка реактивности
expect(wrapper.text()).toContain('5')
expect(wrapper.classes()).toContain('active')
Метод setProps позволяет в одном тесте проверять
несколько сценариев, изменяя входные данные без необходимости
пересоздавать компонент.
Если изменение пропса вызывает асинхронные действия (например, watch или API-вызовы), необходимо учитывать задержку реактивного обновления:
await wrapper.setProps({ value: 'новое значение' })
await nextTick()
expect(wrapper.vm.computedValue).toBe('обновлённое значение')
nextTick гарантирует завершение всех реактивных
обновлений, что важно для точной проверки состояния компонента после
изменения пропсов.
await или nextTick
после setProps для корректного тестирования.setProps для изменения локального
состояния компонента — это инструмент исключительно для входных
данных.Метод setProps является ключевым инструментом для
тестирования реактивности компонентов Vue, позволяя моделировать
изменения данных и проверять поведение интерфейса в условиях
динамических пропсов.