我认为你正试图测试你不应该做的事情。您的测试名称建议您不要相信setTimeout
函数仅在给定的超时后调用console.log
。
由于这不是你的代码,你应该不应该单元测试它。此外,setTimeout
是可能的东西,你可以肯定的正常工作。
那么还有什么需要测试的?您的代码 - 称为setTimeout
的代码。 您可以确保正确调用setTimeout。
至于如何做到这一点 - 您可以使用两个sinon功能。第一个是useFakeTimers
,它可以让你控制时钟。第二个是间谍,你应该在console.log
上使用它来确保它被调用。
describe('#helloAfter100ms()',function(){
it('console logs hello ONLY after 100ms',function(){
const clock = sinon.useFakeTimers();
const logSpy = sinon.spy(console, 'log');
helloAfter100ms();
expect(logSpy).to.not.have.been.called;
clock.tick(100);
expect(logSpy).to.have.been.calledOnce;
logSpy.restore();
clock.restore();
}
}
我建议你也可以使用'sinon'与摩卡,它提供了你的方式间谍/嘲讽的东西,并多次操作对于这些情况timeout'的'例如:https://github.com/mochajs/摩卡/维基/ Spies – quirimmo