Триггер событий — один из фундаментальных инструментов тестирования компонентов Vue с помощью Vue Test Utils. Он позволяет симулировать действия пользователя, проверять реакцию компонента на события и корректность работы логики, связанной с интерактивными элементами.
triggerМетод trigger вызывается на обёртке компонента (wrapper)
или на конкретном элементе, найденном с помощью селектора. Его
синтаксис:
await wrapper.find('селектор').trigger('событие', options)
'событие' — строка с названием
события, например 'click', 'input',
'submit'.options — объект, содержащий
дополнительные параметры события, такие как bubbles,
cancelable, key, code,
value и другие.Пример базового использования:
import { mount } from '@vue/test-utils'
import ButtonComponent from '@/components/ButtonComponent.vue'
test('клик по кнопке вызывает метод', async () => {
const wrapper = mount(ButtonComponent)
await wrapper.find('button').trigger('click')
expect(wrapper.emitted()).toHaveProperty('clicked')
})
В этом примере проверяется, что при клике на кнопку вызывается
событие clicked, эмитируемое компонентом.
Для полей ввода важно не только вызвать событие input,
но и правильно задать значение:
const input = wrapper.find('input')
await input.setValue('тестовое значение') // setValue автоматически триггерит 'input'
expect(wrapper.vm.text).toBe('тестовое значение')
Метод trigger также позволяет вручную имитировать
событие с конкретными свойствами:
await input.trigger('keydown.enter', { key: 'Enter' })
expect(wrapper.emitted()).toHaveProperty('submit')
Здесь событие keydown с клавишей Enter проверяет реакцию
формы на нажатие клавиши.
nextTickМногие события вызывают изменения состояния компонента, которые не
применяются мгновенно. Для корректной проверки нужно использовать
await nextTick() или ждать завершения
trigger:
import { nextTick } from 'vue'
await wrapper.find('button').trigger('click')
await nextTick()
expect(wrapper.text()).toContain('Кнопка нажата')
Метод trigger возвращает промис, поэтому его можно
использовать с await для последовательного выполнения
событий и проверки последствий.
trigger поддерживает передачу объекта
события, что позволяет тестировать сложные сценарии:
await wrapper.find('input').trigger('input', {
target: { value: 'новое значение' }
})
expect(wrapper.vm.text).toBe('новое значение')
target.value — имитация изменения
значения поля.key,
code — для симуляции нажатия клавиш.bubbles,
cancelable — управление стандартными
свойствами событий.Метод trigger работает не только с DOM-событиями, но и с
пользовательскими событиями, которые компонент эмитирует через
$emit:
await wrapper.vm.$emit('custom-event', { id: 1 })
expect(wrapper.emitted('custom-event')[0]).toEqual([{ id: 1 }])
При необходимости можно комбинировать DOM-события и
$emit, чтобы полностью покрыть интерактивные сценарии.
Триггер позволяет проверять реакцию компонента на цепочку событий:
const button = wrapper.find('button')
await button.trigger('mousedown')
await button.trigger('mouseup')
await button.trigger('click')
expect(wrapper.vm.isClicked).toBe(true)
Это особенно полезно для сложных UI-компонентов, где важна последовательность действий пользователя.
triggerawait всегда, даже для простых событий,
чтобы убедиться, что DOM обновлён.setValue, так как он
автоматически вызывает событие input.key и
code, чтобы имитация была максимально точной.wrapper.emitted() для
точной валидации логики.Метод trigger является ядром взаимодействия с
компонентами в тестах Vue. Он позволяет имитировать реальные действия
пользователя и проверять реакцию компонентов на различные сценарии, от
кликов и ввода текста до сложных последовательных событий. Правильное
использование trigger обеспечивает надёжное покрытие
функциональности и точность тестов.