mount() — основной метод библиотеки Vue Test
Utils, используемый для полного монтирования компонентов Vue. В
отличие от shallowMount(), который монтирует компонент
частично, подменяя дочерние компоненты заглушками, mount()
рендерит весь компонент вместе с его шаблоном, реактивными данными и
дочерними компонентами. Это обеспечивает полную интеграцию и
реалистичное тестирование поведения компонента в условиях, близких к
реальному приложению.
Для начала необходимо импортировать функцию:
import { mount } from '@vue/test-utils'
import MyComponent from '@/components/MyComponent.vue'
Базовый синтаксис монтирования:
const wrapper = mount(MyComponent)
Здесь wrapper — объект обёртки, предоставляющий полный
API для взаимодействия с компонентом: доступ к данным, методам, событиям
и DOM-узлам.
mount() позволяет передавать начальные пропсы и
данные через объект настроек:
const wrapper = mount(MyComponent, {
props: {
title: 'Тестовый заголовок'
},
data() {
return {
counter: 10
}
}
})
props — передача значений свойств, ожидаемых
компонентом.data — позволяет задать начальное состояние реактивных
данных.Можно обращаться к данным через wrapper.vm:
expect(wrapper.vm.counter).toBe(10)
wrapper.vm возвращает экземпляр Vue
компонента, что даёт доступ к методам, вычисляемым свойствам и
реактивным переменным.
Полное монтирование даёт возможность проверять фактический DOM, а не его имитацию:
expect(wrapper.text()).toContain('Тестовый заголовок')
expect(wrapper.find('button').exists()).toBe(true)
wrapper.text() — возвращает текстовое содержимое
компонента.wrapper.find(selector) — ищет первый элемент по
CSS-селектору.wrapper.findAll(selector) — возвращает коллекцию
найденных элементов.mount() гарантирует, что дочерние компоненты тоже будут
отрисованы и доступны для поиска.
Полное монтирование позволяет имитировать пользовательские события и проверять их обработку:
const button = wrapper.find('button')
button.trigger('click')
expect(wrapper.vm.counter).toBe(11)
Метод trigger() поддерживает любые DOM-события
(click, input, submit и т.д.).
Это особенно важно для тестирования интерактивных компонентов с
реактивным поведением.
Vue Test Utils позволяет подключать глобальные плагины, компоненты и миксины прямо при монтировании:
const wrapper = mount(MyComponent, {
global: {
plugins: [MyPlugin],
components: {
'ChildComponent': ChildComponent
},
mocks: {
$t: (msg) => msg
}
}
})
plugins — подключение сторонних Vue-плагинов.components — регистрация глобальных дочерних
компонентов.mocks — имитация глобальных свойств, таких как
$router или $store.Такое монтирование позволяет тестировать компонент в окружении, максимально близком к реальному приложению.
mount() полностью поддерживает слоты и scoped
slots:
const wrapper = mount(MyComponent, {
slots: {
default: '<span>Слот по умолчанию</span>',
header: '<h1>Заголовок</h1>'
}
})
expect(wrapper.find('span').text()).toBe('Слот по умолчанию')
expect(wrapper.find('h1').text()).toBe('Заголовок')
Также можно использовать функции для динамических слотов:
const wrapper = mount(MyComponent, {
slots: {
default: (props) => `<div>${props.text}</div>`
}
})
Это позволяет тестировать слоты с вычисляемым содержимым, что невозможно при частичном монтировании.
Полное монтирование учитывает асинхронные обновления
реактивных данных. Для корректной проверки изменений после
мутаций используется nextTick():
await wrapper.setData({ counter: 20 })
await wrapper.vm.$nextTick()
expect(wrapper.text()).toContain('20')
setData() — изменяет реактивное состояние
компонента.$nextTick() — ожидает завершения обновления DOM.Аналогично можно работать с асинхронными методами:
await wrapper.vm.loadData()
await wrapper.vm.$nextTick()
expect(wrapper.find('.item').exists()).toBe(true)
mount() от
shallowMount()| Особенность | mount() |
shallowMount() |
|---|---|---|
| Дочерние компоненты | Полностью монтируются | Подменяются заглушками |
| DOM | Реальный | Частичный |
| Тестирование слотов | Полная поддержка | Полная поддержка |
| Глобальные плагины и mocks | Используются | Используются |
| Идеален для | Интеграционных тестов | Юнит-тестов компонента |
Полное монтирование повышает точность тестирования, особенно когда поведение зависит от дочерних компонентов, слотов или глобальных зависимостей.
Функция mount() обеспечивает глубокое и
реалистичное тестирование компонентов Vue, позволяя проверять
реактивные данные, события, DOM, слоты и интеграцию с плагинами.
Использование этой функции целесообразно при необходимости имитации
реального окружения, полного рендеринга компонента и проверки его
функциональности на всех уровнях.