Snapshot-тестирование является мощным инструментом при работе с компонентами Vue, позволяя фиксировать текущее состояние компонента и обнаруживать непреднамеренные изменения в его структуре. Этот подход особенно полезен для компонентов с большим количеством вложенных элементов, сложной разметкой или динамическими вычисляемыми свойствами.
Snapshot-тест сохраняет снимок текущей разметки или состояния компонента в отдельном файле. При последующих запусках теста Vue Test Utils сравнивает текущий вывод компонента с сохранённым снимком. Если различия обнаружены, тест считается проваленным, что сигнализирует о возможных регрессиях.
Snapshot-тесты проверяют структурную целостность компонента, а не его поведение или логику. Они эффективны для обнаружения неожиданных изменений в DOM, пропсах, слотах или классах CSS.
Компоненты с большой разметкой Для компонентов с множеством вложенных элементов ручная проверка каждого элемента становится трудоёмкой. Снимок позволяет быстро удостовериться, что структура DOM не изменилась.
Компоненты с динамическими слотами Сложные слоты с несколькими условиями отображения лучше проверять через snapshot, чтобы гарантировать корректность рендеринга при разных конфигурациях.
Компоненты с множеством пропсов Snapshot фиксирует итоговое отображение при разных комбинациях пропсов, позволяя обнаружить непреднамеренные изменения при добавлении новых свойств.
Раннее выявление регрессий Любое случайное изменение шаблона или класса CSS сразу отражается в snapshot-тесте. Это предотвращает появление багов, которые трудно отследить через визуальный осмотр.
trigger и setValue из Vue
Test Utils.mount или shallowMount и проверкой
возвращаемых значений или состояния компонента.import { mount } from '@vue/test-utils';
import MyComponent from '@/components/MyComponent.vue';
describe('MyComponent', () => {
it('рендерится корректно', () => {
const wrapper = mount(MyComponent, {
props: { title: 'Тестовый заголовок' },
slots: { default: '<p>Слот содержимого</p>' }
});
expect(wrapper.html()).toMatchSnapshot();
});
});
Ключевые моменты:
mount создаёт полноценный экземпляр компонента, включая
дочерние компоненты. Для более лёгких тестов можно использовать
shallowMount.wrapper.html() возвращает итоговую разметку компонента,
включая все дочерние узлы. Именно её удобнее всего сохранять в
snapshot.jest -u), чтобы не фиксировать непреднамеренные
изменения.Snapshot-тестирование в Vue Test Utils позволяет поддерживать стабильность визуальной части компонентов, сокращает рутинную проверку изменений и служит дополнительной защитой от регрессий при работе с большими проектами.