我正在尝试在Jasmine中执行以下操作,但不确定是否可能:
我使用两种方法A和B获得了服务对象。
方法A调用方法B(实际上B是一个$ http调用,我在测试期间不想执行:我想模拟它)。
在我的BeforeEach部分中,我这样做:spyOn(Serviceinstance, 'B').and.callFake(function(){ return true; });
在我的测试中:
var result = Serviceinstance.A();
expect(result).toBeTrue();
当然,B的真实代码返回false。
我的问题是我的测试总是失败。间谍提供的功能永远不会被方法A调用。
另一方面,如果我这样叫B:
var result = Serviceinstance.B();
然后调用了间谍的功能,我的测试通过了。
所以我应该像这样修改我的实例:
Serviceinstance.B = function(){return true;}
因为Jasmine无法模拟调用堆栈的“第二”级别? (对我来说似乎完全不可能)
我一定会错过一些东西。
最佳答案
这是一个有效的代码:
describe('Service test suite', function() {
it('should return true', function() {
var Serviceinstance = new Service();
spyOn(Serviceinstance, 'B').and.callFake(function() {
return true;
});
expect(Serviceinstance.A()).toBe(true);
})
});
https://jsfiddle.net/ronapelbaum/9moLhhbr/