私は角度サービスを持っています。このサービスの中には、サービス上の別の関数を参照する関数を持つオブジェクトがあります。 (以下コード)私は、オブジェクトの関数が呼び出されるとき、それは実際に本当の関数を呼び出すことを確認するために、私のサービス機能をスパイするためにジャスミン(1.3)を使用したいジャスミン:関数参照でspyOnの後に実関数が呼び出されます
。
私の問題: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あなたは、関数値ではなく、プロパティを偵察しているので、呼び出したい正確なオブジェクト/プロパティを偵察する必要があります。または、動作する2番目の例にあるパターンを使用します。 – apsillers