Jasmine spyOn函数在回调

时间:2016-11-19 01:47:45

标签: javascript unit-testing callback jasmine

如果在回调函数中调用该方法,则在对象上使用spyOn似乎会失败。在回调中对该方法的任何调用都不会被茉莉花注意到。

请参阅下面的代码,我在child.print()方法上创建了一个间谍。如果我在回调(setTimeout)中调用child.print(),它就不起作用:

it('test', function() {
    const child = {
        print: function() {
            console.log('child');
        }
    };
    spyOn(child, 'print');
    const parent = {
        callChildInCallback: function() {
            setTimeout(()=> child.print(), 1000);
        }
    };
    parent.callChildInCallback();
    expect(child.print.calls.count()).toEqual(1);
});

这一个将失败,错误"预期0等于1."

但是,如果我直接调用它,它可以工作:

it('test', function() {
    const child = {
        print: function() {
            console.log('child');
        }
    };
    spyOn(child, 'print');
    const parent = {
        callChild: function() {
            child.print();
        }
    };
    parent.callChild();
    expect(child.print.calls.count()).toEqual(1);
});

我试图在回调中设置断点,似乎我们正在测试的函数的间谍包围已经消失了,这就是表面上的原因。有人可以解释为什么会发生这种情况,以及正确的方法吗?

感谢您阅读〜

1 个答案:

答案 0 :(得分:1)

您需要使用jasmine clock来处理超时功能

C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin