繁体   English   中英

在 mocha 测试中使用 done 和 setTimeout 的简单示例未按预期工作

[英]Simple example using done and setTimeout inside a mocha test not working as expected

我有一个包含在 setTimeout 函数中的断言的简单测试,如下所示:

  it('asserts after timeout', (done) => {
    setTimeout(() => {
      expect(1).to.be.equal(1);
      done();
    }, 500);
  });

但是我收到以下错误:

错误:超过 2000 毫秒超时。 对于异步测试和钩子,确保调用“done()”; 如果返回 Promise,请确保它已解决。

在我仔细查看代码库中的每个单元测试之后,我意识到有一个对 sinon.useFakeTimers(); 的调用。 删除它解决了问题。

你的例子应该有效。 但是,当期望失败时,您会收到该错误。 为此,请将您的setTimeout包装在Promise并确保您在下一个 then 方法中调用done

done方法放在与您正在测试的区域相同的区域中被认为是bad practice

it('asserts after timeout', (done) => {
    (new Promise((resolve,reject)=>{
       setTimeout(() => {
         resolve();
       }, 500);
    }))
    .then(()=>expect(1).to.be.equal(1))
    .then(()=>done(), done);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM