setInterval的作品setTimeout不

我目前正在编写使用APM 1.6.0,节点0.10.40和Jasmine 1.3的Atom包的asynchronous规范。 不幸的是,我不能setTimeout工作。

由于茉莉花1.3使用顺序runs允许asynchronoustesting,我试图理解从文档的例子。

事实certificate, setTimeout callback永远不会被调用。

在search这种情况发生的原因时,我将setTimeout -statement重命名为setInterval (因为两个函数都具有相同的签名)。

如果我执行下面的代码

 describe('an asynchronous test', () => { it('should do some async stuff', () => { runs(() => { setInterval(() => { console.info('async'); }, 75); setTimeout(() => { console.info('async2'); }, 75); }); waitsFor(() => { return false; }, 'missing events'); // will wait ~5 seconds. }); }); 

我得到以下输出:

 async async async ... 

为什么setInterval函数正常工作,而setTimeout完全不工作?

编辑:问题的第一个版本没有提到规格在Atom环境中运行。 赦免。

我终于通过这个postfind了解决办法。 它导致spec-helper文件,其中setTimeout由Jasmine-Spy存根。

要使setTimeout再次工作,有必要使用jasmine.unspy()来删除间谍。 setTimeout被调用后,可以用spyOn()重新激活间谍。

下面的几行说明了用我上面的例子:

 runs(() => { // disable spy jasmine.unspy(window, 'setTimeout'); setTimeout(() => { console.info('async2'); }, 75); // reenable spy spyOn(window, 'setTimeout') .andCallFake(window.fakeSetTimeout); });