Javascript 在mocha测试中使用done和setTimeout的简单示例未按预期工作
我有一个简单的测试,其中一个断言包含在setTimeout函数中,如下所示:Javascript 在mocha测试中使用done和setTimeout的简单示例未按预期工作,javascript,testing,mocha.js,Javascript,Testing,Mocha.js,我有一个简单的测试,其中一个断言包含在setTimeout函数中,如下所示: it('asserts after timeout', (done) => { setTimeout(() => { expect(1).to.be.equal(1); done(); }, 500); }); 但是,我得到了以下错误: 错误:超过2000毫秒的超时时间。对于异步测试和挂钩,请确保 调用“done()”;如果返回承诺,请确保它已解决 你的例子
it('asserts after timeout', (done) => {
setTimeout(() => {
expect(1).to.be.equal(1);
done();
}, 500);
});
但是,我得到了以下错误:
错误:超过2000毫秒的超时时间。对于异步测试和挂钩,请确保
调用“done()”;如果返回承诺,请确保它已解决
你的例子应该有用。然而,当期望失败时,您将得到该错误。为此,请将
setTimeout
包装在Promise
中,并确保在下一个then方法中调用done
因此,将done
方法与您正在测试的方法放在同一区域被认为是不好的做法
it('asserts after timeout', (done) => {
(new Promise((resolve,reject)=>{
setTimeout(() => {
resolve();
}, 500);
}))
.then(()=>expect(1).to.be.equal(1))
.then(()=>done(), done);
});
在仔细研究代码库中的每个单元测试之后,我意识到有一个对sinon.useFakeTimers()的调用;删除该选项修复了此问题。可能您需要一个try catch,并在catch中放入done()。。整个页面/应用程序的超时时间可能为2000。。