setInterval工作setTimeout不工作;t
setInterval works setTimeout doesn't
我目前正在为使用APM 1.6.0、Node 0.10.40和Jasmine 1.3的Atom包编写异步规范。不幸的是,我无法使setTimeout
工作。
由于Jasmine 1.3使用顺序runs
-块来允许异步测试,所以我试图从文档中理解这个示例。
事实证明,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
-功能正常工作,而setTimeout
完全不工作?
编辑:问题的第一个版本没有提到规范是在Atom环境中运行的。原谅
我终于通过这篇文章找到了解决方案。它导致了规范助手文件,其中setTimeout
被Jasmine间谍截断。
为了使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);
});
相关文章:
- 刷新后,setTimeout将工作或不工作
- 使setInterval和setTimeout工作时出现问题
- 为什么我需要在setTimeout中有匿名函数才能使此代码工作
- window.open没有't在设置setTimeout内工作-弹出窗口被阻止
- 如何使setTimeout脚本在html表单中正常工作
- SetTimeout延迟未按jquery幻灯片中的预期工作
- setTimeout()在JavaScript中是如何工作的
- Javascript-为什么不是't此setTimeout函数正在工作
- setInterval工作setTimeout不工作;t
- setTimeout未按要求工作
- 为什么javascript setTimeout()不能在循环中工作
- setTimeout方法的工作原理很奇怪
- 变量在Javascript中是如何工作的?可以在setTimeout期间更改变量值
- Javascript:addEventListener 仅在 setTimeout 中工作
- 如何删除 settimeOut 的队列工作
- 在工作线程中使用 setTimeOut
- 无法在 javascript 中获取 setTimeout 以正常工作
- 在循环中调用 setTimeout 未按预期工作
- setTimeout() 如何在 JS 上工作
- JavaScript代码首先使用setTimeout工作,但随后崩溃或不起作用