Vue Test Utils & Vue 3:如何有效测试 onKeyStroke() 事件
Vue Test Utils & Vue 3: How to effectively test onKeyStroke() event
我目前正在使用 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')
})
wrapper 是挂载的组件:
const wrapper = mount(MyComponent, {
props: {
...
}
})
然后我在 canvas 上有以下绑定 属性:
<canvas :data-constellations="showConstellations" />
但是,使用此设置,似乎此特定设置 canvas elmenent 上的 data-constellations 属性始终设置为默认 false,并且在 keyPress 之后它不会更新 ...
有人可以告诉我我需要做什么才能使它正常工作吗?
您的 onKeyStroke
将事件侦听器附加到文档(通过 { target: document }
选项),因此测试必须 dispatch 文档上的 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')
})
我目前正在使用 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')
})
wrapper 是挂载的组件:
const wrapper = mount(MyComponent, {
props: {
...
}
})
然后我在 canvas 上有以下绑定 属性:
<canvas :data-constellations="showConstellations" />
但是,使用此设置,似乎此特定设置 canvas elmenent 上的 data-constellations 属性始终设置为默认 false,并且在 keyPress 之后它不会更新 ...
有人可以告诉我我需要做什么才能使它正常工作吗?
您的 onKeyStroke
将事件侦听器附加到文档(通过 { target: document }
选项),因此测试必须 dispatch 文档上的 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')
})