я следующие услуги и директиву:Тест вызова службы внутри директивы
angular.module("epcApp", [])
.service("epcData", function($http, $q){
var urls = {
load: "some-url",
save: "some-url"
};
this.load = function(){
return $http.get(urls.load).then(function(data){
return data;
});
}
this.save = function(req){
return $http.get(urls.save, req).then(function(data){
return data;
});
}
})
.directive("epc", ['epcData', function(epcData){
return {
restrict: "E",
templateUrl: "some-url",
link: function(scope, element, args, form){
scope.collectSelects = function(container){
// some code
}
scope.collectCheckBoxes = function(container){
// some code
}
epcData.load().then(function(data){
scope.userOptions =
// do something with scope.collectCheckBoxes and scope.collectSelects
});
}
}
}]);
И я хочу, чтобы тест:
- epcData.load была вызвана внутри директивы
- collectSelects и collectCheckboxes были вызваны внутри обещания от epcData.load
Не могу понять, как издеваться над сервисом. Это то, что я от того, что я видел в документации:
//Load the EPC main module
beforeEach(module('epcApp'));
//Intialize the directive with a mock scope
beforeEach(function(){
var element, scope, epcData, $httpBackend, mock;
mock = {
load: jasmine.createSpy(),
save: jasmine.createSpy()
}
module(function($provide){
$provide.service('epcData', mock);
})
inject(function($rootScope, $compile, $injector){
epcData = $injector.get('epcData');
scope = $rootScope.$new();
element = angular.element("<epc></epc>");
element = $compile(element)(scope);
scope.$digest();
})
});
it("should have loaded data", function(){
expect(mock.load).toHaveBeenCalled();
})
Я получаю следующее сообщение об ошибке Error: [ng:areq] Argument 'fn' is not a function, got Object
Если удалить разделы $provide
и $injector
вообще, я получаю «Неожиданное request ' ошибка, когда фактический метод epcData.load
пытается выполнить http-запрос. Поэтому мне кажется, что я приближаюсь к переопределению метода службы, но я делаю это неправильно.
Я действительно пробовал делать «значение», но я получаю другую ошибку, в основном мой исходный метод загрузки загружается, пытается загрузить исходный URL-адрес и получить «Неожиданный запрос». Поэтому в этом случае кажется, что я не могу переопределить свои оригинальные методы. Я рассмотрю документы для шпионов, как вы рекомендуете. Благодарю. – Fernando
Если вы используете значение, метод загрузки источника не должен срабатывать, поскольку он был затенен этой службой значений. – Chandermani