我试图在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无法模拟调用堆栈的“第二”级别? (对我来说似乎不太可能)
我肯定错过了一些东西......
答案 0 :(得分:1)
这是一个有效的代码:
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);
})
});