如果在回调函数中调用该方法,则在对象上使用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);
});
我试图在回调中设置断点,似乎我们正在测试的函数的间谍包围已经消失了,这就是表面上的原因。有人可以解释为什么会发生这种情况,以及正确的方法吗?
感谢您阅读〜
答案 0 :(得分:1)
您需要使用jasmine clock来处理超时功能
C:\Users\user\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin