我试图在下一个场景中测试一个函数调用:
JS :
var Demo = function(option) {
if (option) func();
function func() {
console.log('called')
}
return {
'func': func
}
}
Jasmine :
beforeEach(function() {
var demo = new Demo(true);
spyOn(demo, 'func');
this.demo = demo;
});
it("should call func()", function() {
expect(this.demo.func).toHaveBeenCalled();
});
尽管它在控制台中记录了'called'
,但它的规格却失败了:
已经调用了预期的间谍功能。
从代码流开始,我认为它发生是因为在调用函数之后,间谍开始。所以我的问题是 - 在测试中捕获函数调用的正确方法是什么?
答案 0 :(得分:1)
这可能是更好的方法。添加func
作为演示原型的一部分。那么你可以把间谍与原型联系起来。
var Demo = function(option) {
if (option) this.func();
}
Demo.prototype.func = function(){
console.log("called")
}
beforeEach(function() {
spyOn(Demo.prototype, 'func')
var demo = new Demo(true);
this.demo = demo;
});
it("should call func()", function() {
expect(this.demo.func).toHaveBeenCalled();
});