我有一个简单的测试,其中包含一个包含在setTimeout函数中的断言,如下所示:
it('asserts after timeout', (done) => {
setTimeout(() => {
expect(1).to.be.equal(1);
done();
}, 500);
});
但是我遇到以下错误:
错误:超时超过2000毫秒。对于异步测试和挂钩,请确保 称为“ done()”;如果返回了Promise,请确保它可以解决。
答案 0 :(得分:1)
猛跳过去,查看了代码库中的每个单元测试之后,我意识到有一个对sinon.useFakeTimers()的调用。删除该问题已解决。
答案 1 :(得分:0)
您的示例应该起作用。但是,当期望失败时,您将得到该错误。为此,请将setTimeout
包裹在Promise
中,并确保在下一个then方法中调用done
。
之所以认为bad practice
是因为将done
方法放在要测试的区域中。
it('asserts after timeout', (done) => {
(new Promise((resolve,reject)=>{
setTimeout(() => {
resolve();
}, 500);
}))
.then(()=>expect(1).to.be.equal(1))
.then(()=>done(), done);
});