#vue.js #jestjs #vuejs3
Вопрос:
В настоящее время я использую vueuse/core
датчик onKeyStroke
событий.
onKeyStroke(
'c',
(e) => {
e.preventDefault()
showAsterisms.value = false
showConstellations.value = !showConstellations.value
},
{
target: document
}
)
Я хочу протестировать эту функциональность со следующими функциями:
it('Constellations Should Be Visible', async () => {
wrapper.trigger('keydown', {
key: 'c'
})
await wrapper.vm.$nextTick()
const canvas = wrapper.find('canvas')
const canvasAttributes = canvas.attributes()
expect(canvasAttributes['data-constellations']).toBe('true')
})
Где обертка является смонтированным компонентом:
const wrapper = mount(MyComponent, {
props: {
...
}
})
Затем у меня есть следующее связанное свойство на холсте:
<canvas :data-constellations="showConstellations" />
Однако при такой настройке кажется, что в этой конкретной настройке атрибут data-constellations на элементе canvas всегда имеет значение по умолчанию false, и после нажатия клавиши он не обновляется …
Не мог бы кто-нибудь посоветовать мне, пожалуйста, что мне нужно сделать, чтобы это сработало?
Ответ №1:
Вы onKeyStroke
прикрепляете прослушиватель событий к документу (с помощью { target: document }
опции), поэтому тест должен отправить keydown
событие в документе:
it('Constellations Should Be Visible', async () => {
const wrapper = shallowMount(MyComponent)
// simulate keypress on document
const event = new KeyboardEvent('keydown', { key: 'c' })
document.dispatchEvent(event)
await wrapper.vm.$nextTick()
const canvas = wrapper.find('canvas')
const canvasAttributes = canvas.attributes()
expect(canvasAttributes['data-constellations']).toBe('true')
})
Комментарии:
1. А-а-а, понятно. Да, я думал
trigger()
, подключался ли он к нужному узлу. Я думаю, в этом смысле нам тоже нужноawait wrapper.vm.$nextTick()
, потому что мы не можем использоватьawait wrapper.trigger()
. Спасибо вам за это!