Ich habe einen AngularJS-Dienst geschrieben und möchte ihn einem Unit-Test unterziehen.
angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
factory('myService', function ($http, fooService, barService) {
this.something = function() {
// Do something with the injected services
};
return this;
});
In meiner Datei app.js sind folgende Dateien registriert:
angular
.module('myApp', ['fooServiceProvider','barServiceProvider','myServiceProvider']
)
Ich kann testen, ob der DI als solcher funktioniert:
describe("Using the DI framework", function() {
beforeEach(module('fooServiceProvider'));
beforeEach(module('barServiceProvider'));
beforeEach(module('myServiceProvder'));
var service;
beforeEach(inject(function(fooService, barService, myService) {
service=myService;
}));
it("can be instantiated", function() {
expect(service).not.toBeNull();
});
});
Dies hat bewiesen, dass der Dienst vom DI-Framework erstellt werden kann. Als Nächstes möchte ich den Dienst jedoch einem Unit-Test unterziehen, was bedeutet, dass die injizierten Objekte verspottet werden.
Wie mache ich das?
Ich habe versucht, meine Scheinobjekte in das Modul einzufügen, z
beforeEach(module(mockNavigationService));
und Umschreiben der Service-Definition als:
function MyService(http, fooService, barService) {
this.somthing = function() {
// Do something with the injected services
};
});
angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
factory('myService', function ($http, fooService, barService) { return new MyService($http, fooService, barService); })
Letzteres scheint jedoch zu verhindern, dass der Dienst wie alle anderen vom DI erstellt wird.
Weiß jemand, wie ich die injizierten Dienste für meine Unit-Tests verspotten kann?
Vielen Dank
David