Що таке Vue Test Utils?
Vue Test Utils (VTU) - це офіційна бібліотека для тестування Vue-компонентів. Вона надає зручний API для монтування, взаємодії та перевірки поведінки компонентів у unit- та інтеграційних тестах.
Простіше кажучи:
Vue Test Utils - це інструмент, який дозволяє писати тести для Vue так, ніби ви працюєте з компонентами "наживо".
Це основний інструмент для тестування логіки та UI Vue-компонентів.
Для чого потрібен Vue Test Utils?
З VTU ви можете:
- монтувати компоненти в ізольованому середовищі
- симулювати події: click, input, submit
- змінювати props
- модифікувати reactive state
- тестувати взаємодію child -> parent
- тестувати слоти
- робити shallow render (без дітей)
- асинхронно чекати рендерів
- робити snapshot-тести
- викликати методи компонента
Це основний інструмент для перевірки поведінки компонентів.
Приклад тесту з Vue Test Utils + Vitest
Компонент
<!-- Counter.vue -->
<template>
<button @click="count++">{{ count }}</button>
</template>
<script setup>
import { ref } from 'vue'
const count = ref(0)
</script>Тест
import { mount } from '@vue/test-utils'
import { describe, it, expect } from 'vitest'
import Counter from './Counter.vue'
describe('Counter', () => {
it('increments count on click', async () => {
const wrapper = mount(Counter)
await wrapper.trigger('click')
expect(wrapper.text()).toBe('1')
})
})Що робить VTU в цьому тесті?
mount(Counter)- створює компонент у jsdomwrapper.trigger('click')- імітує клік- Vue рендерить DOM
wrapper.text()повертає текст кнопки
Тест перевіряє реальну поведінку.
Основні методи Vue Test Utils
Для рендеру
mount()- повноцінний рендерshallowMount()- заміна дітей на заглушки (Vue 2)
У Vue 3 використовується лише mount, але можна вручну stub-ити дітей.
Для пошуку елементів
wrapper.find('button')wrapper.findComponent(ChildComponent)wrapper.findAll(...)
Для взаємодії
trigger('click')setValue('text')setChecked()setProps({ ... })
Для перевірки стану
wrapper.text()wrapper.html()wrapper.emitted()wrapper.props()
Що можна тестувати з VTU?
Логіку компонента
reactive state, computed, watchers.
UI-рендер
як компонент виглядає за різних props.
Події
чи надсилає $emit, чи викликаються методи.
Слоти
рендер слотів через slots: {...}.
Інтеграцію з дочірніми компонентами
(або їх можна застабити).
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.