我有一個角度服務。在這個服務裏面我有一個帶有一個函數的對象,它引用了服務上的另一個函數。 (代碼如下)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