В Vue Test Utils передача props при монтировании
компонента является одной из ключевых возможностей для имитации
различных состояний компонента и проверки его поведения.
props позволяют контролировать входные данные компонента,
что особенно важно для тестирования реактивности, условного рендеринга и
поведения на основе внешних значений.
props через mount и
shallowMountVue Test Utils предоставляет два основных метода для создания
экземпляра компонента: mount и shallowMount.
Оба метода принимают объект опций, одним из которых является
props. Пример базового синтаксиса:
import { mount } from '@vue/test-utils';
import MyComponent from '@/components/MyComponent.vue';
const wrapper = mount(MyComponent, {
props: {
title: 'Тестовый заголовок',
count: 5
}
});
В этом примере при монтировании MyComponent ему
передаются два свойства: title и count. Это
позволяет тесту сразу проверять, корректно ли компонент отображает
переданные значения:
expect(wrapper.text()).toContain('Тестовый заголовок');
expect(wrapper.text()).toContain('5');
Для проверки реактивного поведения компонента props
могут изменяться после монтирования с помощью метода
setProps. Этот метод возвращает промис, что позволяет
работать с асинхронными обновлениями в DOM:
await wrapper.setProps({ count: 10 });
expect(wrapper.text()).toContain('10');
Ключевые моменты при использовании setProps:
props триггерит повторный рендер
компонента.props.props,
следует использовать await для ожидания завершения
обновления.При монтировании компонента props можно комбинировать с
другими опциями, такими как slots, global или
attrs. Пример передачи props вместе с
слотами:
const wrapper = mount(MyComponent, {
props: { title: 'Пример' },
slots: {
default: '<p>Слот-контент</p>'
}
});
expect(wrapper.text()).toContain('Пример');
expect(wrapper.html()).toContain('<p>Слот-контент</p>');
Vue Test Utils корректно обрабатывает типы props,
указанные в компоненте. Если передается значение несоответствующего
типа, Vue выдает предупреждение в консоли, что важно учитывать при
написании тестов. Для тестирования граничных значений рекомендуется
передавать как корректные, так и некорректные типы и проверять реакцию
компонента.
const wrapper = mount(MyComponent, {
props: { count: 'не число' } // если count ожидается числом
});
// Проверка наличия предупреждения или fallback-значения
expect(wrapper.props('count')).toBe('не число');
propsData (Vue 2)В Vue 2 для передачи props использовалась опция
propsData. В Vue 3 она была заменена на стандартный
props. Пример для Vue 2:
const wrapper = mount(MyComponent, {
propsData: { title: 'Тест' }
});
Для новых проектов рекомендуется использовать современный синтаксис
props, совместимый с Vue 3.
prop создавать отдельный тест и проверять его влияние на
рендер.props через setProps.props с другими входными данными
компонента.Передача props при монтировании является фундаментальной
частью unit-тестирования Vue-компонентов. Корректное использование
mount, shallowMount и setProps
позволяет создавать надёжные и предсказуемые тесты, обеспечивая
уверенность в поведении компонентов при любых входных данных.