У меня есть угловое обслуживание. Внутри этой службы у меня есть объект с функцией, которая ссылается на другую функцию службы. (Код ниже)Жасмин: Реальная функция вызывается после 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/Угловая/Жасмин я не понимаю в первом примере?
Я понял, что это что-то такое. В любом случае, чтобы проверить их? – Mistrog
@Mistrog Вы проверяете свойства, а не на значения функций, поэтому вам нужно будет отслеживать точный объект/свойство, которое вы хотите вызвать. Кроме того, используйте шаблон, присутствующий в вашем втором примере, который работает. – apsillers