setInterval工作setTimeout没有

时间:2016-04-11 12:50:22

标签: javascript node.js atom-editor

我目前正在使用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环境中运行的。赦免。

1 个答案:

答案 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);
});