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); });
- 我怎么能有一个JS应用程序内的受保护的范围,它不会受到任何其他function的影响?
- RangeError:在debugging/logging/检查Node.js中的对象时超出最大调用堆栈大小
- 使用TypeScript 2.0导入js文件
- 如何知道Mongoose的upsert是否创build了一个新文档?
- 数组中的函数在js中为null
- 我可以指定如何处理asynchronousJavaScript库中的错误?
- NodeJS – 在process.oncallback中testingunit testingsetTimeout
- 如何从Meteor.js中重新启动Meteor服务器
- 如何在javascript中打印函数签名