我已经将mocha
配置为karma
的测试运行程序,直到现在它仍然运行良好。甚至某些常规的异步功能在过去也可以使用。
但是现在我想测试自定义HTML event ,并且在等待承诺解决时收到错误message Timeout of 10000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves
。
我的代码中的oneEvent
函数仅返回对所发出事件的承诺。
同一行const event = await oneEvent(document.body, "colorChange")
在我的应用程序中起作用,这意味着该事件肯定会立即触发,并且诺言得到解决。
论坛中的某些人建议通过this.enableTimeouts(false)
禁用 timeout 选项。我这样做了,但也没有帮助。我很难调试此问题,因为其他 promise 正常工作。我希望其他人在这里也有类似的问题。谢谢!
describe("ColorSlider", function() {
this.timeout(10000)
it("check colorChange event", async () => {
const event = await oneEvent(document.body, "colorChange")
// assert(10, 10) // makes no difference
})
})
编辑:
似乎it
回调无法从先前在events
回调中集成到dom中的元素接收it
。我真的很奇怪为什么会这样,因为我仍然可以在以后的it
回调中引用这些元素。
似乎是这种情况,因为我现在可以使以下代码正常工作。之前,我仅发布了第二个it
回调。
现在,要完成这项工作,我不得不第二次在相同的it
函数内部将元素添加到dom中,如下所示::
describe("ColorSlider", function() {
this.timeout(10000)
const tag = `<${ColorSlider.is}>`
let el
it("loads default", async () => {
el = await fixture(tag)
assert(!!el.offsetParent, true)
})
it("check colorChange event", async () => {
el = await fixture(tag)
const event = await oneEvent(document.body, "colorChange")
})
})
fixture
函数除了将tag
(一个HTML元素)集成到dom中外没有其他作用。如果现在从第二个it
回调中删除此函数,则将再次出现我在OP中描述的错误。但是我认为很奇怪的是,我实际上仍然可以引用第一个it
回调中的元素。例如,我可以写console.log(el)
。那么,为什么在第二次it
回调中又不再次实现该元素,为什么我也不能从中接收事件呢?