我有一个角度服务。在这个服务里面我有一个带有一个函数的对象,它引用了服务上的另一个函数。 (代码如下)Jasmine:用函数参考后调用spyOn后的实际函数
我想使用Jasmine(1.3)来监视我的服务函数,以验证当对象的函数被调用时,它实际上调用真正的函数。
我的问题:调用spyOn后,真正的函数仍然被调用。
FooService.js
angular.module('foo').service("FooService", function() {
var self = this;
this.fooFunction = function() {
console.log("Foo function is being called");
}
this.bar = {
barFunction : self.fooFunction
}
});
FooService接口,spec.js
describe("Testing FooService", function() {
var service;
beforeEach(inject(function(_FooService_) {
service = _FooService_;
}));
describe("Test bar object", function() {
it("should call fooFunction when bar.barFunction is called", function() {
spyOn(service, "fooFunction");
service.bar.barFunction();
expect(service.fooFunction).toHaveBeenCalled();
});
});
});
我发现,如果我改变FooServce.js以下内容,这一切工作,但:
FooService - 工作
angular.module('foo').service("FooService", function() {
var self = this;
this.fooFunction = function() {
console.log("Real function is being called");
}
this.bar = {
barFunction : function() {
return self.fooFunction();
}
}
});
在第一个例子中,我没有理解JavaScript/Angular/Jasmine的哪些部分?
我想这是沿着这些线。无论如何要测试这些呢? – Mistrog
@Mistrog你可以窥探属性,而不是函数值,所以你必须监视你想调用的确切对象/属性。或者,使用第二个例子中的模式。 – apsillers