Логирование состояния компонента является важным инструментом при тестировании Vue-приложений. Оно позволяет не только проверять корректность работы компонентов, но и получать детализированную информацию о текущем состоянии, реактивных данных и поведении методов.
Для начала необходимо создать экземпляр компонента с помощью функции
mount из @vue/test-utils. Эта функция
возвращает обертку (wrapper), через которую осуществляется
взаимодействие с компонентом.
import { mount } from '@vue/test-utils';
import MyComponent from '@/components/MyComponent.vue';
const wrapper = mount(MyComponent, {
props: { initialValue: 10 },
data() {
return { counter: 0 };
}
});
Ключевые моменты:
props позволяют задать исходные свойства
компонента.data можно переопределить для контроля начального
состояния.wrapper предоставляет доступ к методам и реактивным
свойствам компонента.Обертка компонента содержит свойство vm (Vue Model),
через которое можно получить доступ к реактивным данным и методам.
console.log(wrapper.vm.counter); // 0
wrapper.vm.increment();
console.log(wrapper.vm.counter); // 1
Особенности:
wrapper.vm всегда отражает актуальное состояние
реактивных свойств.vm, что
позволяет отслеживать их влияние на данные.Для проверки корректного применения пропсов используется свойство
props() у обертки:
console.log(wrapper.props()); // { initialValue: 10 }
console.log(wrapper.props('initialValue')); // 10
Вывод:
wrapper.props() возвращает объект всех пропсов.wrapper.props('propName') позволяет получить значение
конкретного пропса.Помимо реактивных данных, важно проверять состояние DOM. Vue Test Utils предоставляет методы для доступа к элементам и их содержимому:
console.log(wrapper.html()); // Вывод всей разметки компонента
console.log(wrapper.text()); // Текстовое содержимое компонента
console.log(wrapper.find('button').text()); // Текст конкретного элемента
Рекомендации:
wrapper.html() показывает полную разметку, включая все
вложенные элементы.wrapper.text() игнорирует теги и возвращает только
текст.wrapper.find(selector) используется для поиска
конкретных элементов и их состояния.Vue Test Utils позволяет отслеживать события, которые испускает компонент. Это особенно важно при тестировании взаимодействий с DOM.
wrapper.find('button').trigger('click');
console.log(wrapper.emitted()); // Все события
console.log(wrapper.emitted('increment')); // Событие 'increment'
Замечания:
wrapper.emitted() возвращает объект, где ключи — имена
событий, а значения — массивы аргументов.wrapper.emitted('eventName') возвращает массив всех
вызовов конкретного события.trigger(event) симулирует событие на выбранном
элементе, автоматически вызывая методы и обновляя реактивные
свойства.Vue Test Utils работает в сочетании с реактивной системой Vue, поэтому после изменений состояния необходимо дождаться обновления DOM:
await wrapper.vm.$nextTick();
console.log(wrapper.find('span').text()); // Отображает обновленное значение
Важные моменты:
$nextTick() используется для ожидания обновления DOM
после изменения данных.Для больших компонентов удобно использовать снапшоты:
expect(wrapper.html()).toMatchSnapshot();
Особенности:
$nextTick() для точного отслеживания
обновлений.Логирование состояния компонента в Vue Test Utils — это сочетание
прямого доступа к vm, проверок пропсов, событий и
визуальной разметки. Оно позволяет создавать надежные и детализированные
тесты, которые выявляют ошибки на уровне данных и отображения
одновременно.