Javascript 为vue multiselect编写单元测试
我正在努力解决如何为有问题的用户编写测试 具体来说,我试图“单击”输入打开下拉列表(然后选择一个选项),但是没有任何效果 我试过了Javascript 为vue multiselect编写单元测试,javascript,unit-testing,vue.js,vuejs2,Javascript,Unit Testing,Vue.js,Vuejs2,我正在努力解决如何为有问题的用户编写测试 具体来说,我试图“单击”输入打开下拉列表(然后选择一个选项),但是没有任何效果 我试过了 vm.$el.querySelector('.multiselect').click() 在浏览器中: document.querySelector('.multiselect').click() 还有很多其他的组合,但都不起作用 对于一个强调它的测试覆盖率的库来说,不提供在单元测试中使用它的文档(我可以找到关于如何使用它的文档)是很奇怪的。最终实现了这一点,关
vm.$el.querySelector('.multiselect').click()
在浏览器中:
document.querySelector('.multiselect').click()
还有很多其他的组合,但都不起作用
对于一个强调它的测试覆盖率的库来说,不提供在单元测试中使用它的文档(我可以找到关于如何使用它的文档)是很奇怪的。最终实现了这一点,关键是
.dispatchEvent(new window.Event('focus'))
而不是.focus()
最终测试的相关位:
expect(vm.$el.querySelectorAll('input')).to.have.lengthOf(1)
vm.$el.querySelector('.multiselect').dispatchEvent(new window.Event('focus'))
await tick()
const s = vm.$el.querySelectorAll('.multiselect__element')[2].querySelector('span')
expect(s.innerText).to.equal('Science')
s.dispatchEvent(new window.Event('mousedown'))
await tick()
expect(routes_visited).to.deep.equal(['/s/3-science'])
vm.$el.querySelector('.cross').click()
await tick()
expect(routes_visited).to.deep.equal(['/s/3-science', '/'])
(请注意,我的组件更改了vue路由器
路由,因此我正在监视
路由,并在测试中推入所访问的路由以跟踪更改。)