我目前正在使用APM 1.6.0,Node 0.10.40和Jasmine 1.3为Atom-package编写异步规范。不幸的是我无法让commit
工作。
由于Jasmine 1.3使用顺序runs
-blocks来允许异步测试,我试图理解文档中的示例。
事实证明,永远不会调用setTimeout
- 回调。
在搜索可能发生这种情况的原因时,我将setTimeout
- 语句重命名为setTimeout
(因为两个函数具有相同的签名)。
如果我执行以下代码
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
完全不起作用?
编辑:问题的第一个版本没有提到规范是在Atom环境中运行的。赦免。
答案 0 :(得分:1)
我终于通过这个Post找到了解决方案。它会导致spec-helper - 文件,其中setTimeout
被茉莉花间谍盯住。
要让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);
});