Ich habe schon einige Zeit versucht, einen Dienst ohne Erfolg zu testen und habe auf etwas Hilfe gehofft. Hier ist meine Situation:AngularJS inject service mock in service tests
Ich habe ein Service suchen ein wenig wie diese
myModule.factory('myService', ['$rootScope', '$routeParams', '$location', function($rootScope, $routeParams, $location) {
var mySvc = {
params: {}
}
// Listen to route changes.
$rootScope.$on('$routeUpdate', mySvc.updateHandler);
// Update @params when route changes
mySvc.updateHandler = function(){ ... };
...
...
return mySvc;
}]);
Und ich möchte die Dienste in 'myService'
, bevor der Dienst injiziert verspotten in meinen Tests injiziert wird, damit ich das testen kann Initialisierungscode unter
var mySvc = {
params: {}
}
// Listen to route changes.
$rootScope.$on('$routeUpdate', mySvc.updateHandler);
ich bin mit Jasmin für Tests und spottet. Dies ist, was ich mit jetzt kam für
describe('myService', function(){
var rootScope, target;
beforeEach(function(){
rootScope = jasmine.createSpyObj('rootScope', ['$on']);
module('myModule');
angular.module('Mocks', []).service('$rootScope', rootScope);
inject(function(myService){
target = myService;
});
});
it('should be defined', function(){
expect(target).toBeDefined();
});
it('should have an empty list of params', function(){
expect(target.params).toEqual({});
});
it('should have called rootScope.$on', function(){
expect(rootScope.$on).toHaveBeenCalled();
});
});
Dies allerdings nicht funktioniert. Mein Rootscope-Mock ersetzt nicht das Original, und das Dependency-Injection-Dokument verwirrt mich mehr als alles andere.
Bitte helfen
Vielen Dank! Lief wie am Schnürchen. Ich kann nicht glauben, dass ich das vorher nicht versucht habe. –
Ich musste die Änderung spyOn (rootScope, "$ on") zu spyOn (rootScope, "$ on") hinzufügen undCallThrough(); aber funktionierte großartig und brachte mich in die richtige Richtung. – blackmind