业力摩卡:诺言超越了时间限制

时间:2020-02-11 07:25:54

标签: testing mocha karma-mocha

我已经将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回调中又不再次实现该元素,为什么我也不能从中接收事件呢?

0 个答案:

没有答案
相关问题