В тестировании Vue-компонентов ключевым аспектом является возможность
проверять сгенерированный HTML после рендеринга.
Vue Test Utils предоставляет для этого метод
wrapper.html(), который возвращает строку с полной
разметкой компонента, включая все вложенные элементы. Этот инструмент
позволяет анализировать структуру DOM, проверять наличие классов,
атрибутов, текстового контента и корректность шаблона после применения
реактивных данных и props.
wrapper.html()Метод html() вызывается на объекте wrapper,
который создаётся с помощью mount или
shallowMount. Пример базового использования:
import { mount } from '@vue/test-utils'
import MyComponent from '@/components/MyComponent.vue'
const wrapper = mount(MyComponent)
console.log(wrapper.html())
Результат — строка HTML, включающая:
:class,
:id)Использование wrapper.html() особенно полезно для
снапшот-тестирования, где сравнивается актуальная
разметка с эталонной.
Метод html() позволяет проверять конкретные
элементы и текст через строки:
expect(wrapper.html()).toContain('<button class="submit-btn">')
expect(wrapper.html()).toContain('Отправить')
Важно понимать, что html() возвращает строку
всей разметки, а не отдельный элемент. Для проверки конкретных
элементов удобнее сочетать html() с методами
find или findAll:
const button = wrapper.find('button.submit-btn')
expect(button.html()).toBe('<button class="submit-btn">Отправить</button>')
Такой подход позволяет убедиться, что каждый отдельный элемент рендерится корректно, включая все атрибуты и вложенные элементы.
Vue Test Utils учитывает реактивность компонентов. Изменение
data, props или состояния компонента
отражается в выводе wrapper.html() после вызова
await nextTick():
import { nextTick } from 'vue'
wrapper.setData({ count: 5 })
await nextTick()
expect(wrapper.html()).toContain('5')
Без nextTick() изменения могут не отобразиться, так как
Vue обновляет DOM асинхронно.
v-if, v-show и условные блоки можно
проверять напрямую через HTML:
wrapper.setData({ isVisible: true })
await nextTick()
expect(wrapper.html()).toContain('<div class="popup">')
wrapper.setData({ isVisible: false })
await nextTick()
expect(wrapper.html()).not.toContain('<div class="popup">')
Это позволяет убедиться, что логика отображения элементов полностью соответствует ожиданиям, включая скрытые и видимые блоки.
Динамически привязанные классы и атрибуты также видны через
html():
wrapper.setProps({ active: true })
await nextTick()
expect(wrapper.html()).toContain('class="tab active"')
В комбинации с find можно делать более точечные
проверки:
const tab = wrapper.find('.tab')
expect(tab.html()).toContain('active')
find и text(), чтобы избегать
сложных строковых сравнений.wrapper.html() служит универсальным инструментом для
инспекции DOM в тестах, сочетая простоту строковых
проверок и возможность анализа всей структуры компонента. В сочетании с
реактивными изменениями, условным рендерингом и динамическими классами
метод становится ключевым для детальной валидации Vue-компонентов.