Tengo un servicio AngularJS escrito y me gustaría probarlo por unidad.
angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
factory('myService', function ($http, fooService, barService) {
this.something = function() {
// Do something with the injected services
};
return this;
});
Mi archivo app.js tiene estos registrados:
angular
.module('myApp', ['fooServiceProvider','barServiceProvider','myServiceProvider']
)
Puedo probar que el DI funciona como tal:
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();
});
});
Esto demostró que el servicio puede ser creado por el marco DI, sin embargo, a continuación quiero probar el servicio unitario, lo que significa simular los objetos inyectados.
¿Cómo voy a hacer esto?
Intenté poner mis objetos simulados en el módulo, por ejemplo
beforeEach(module(mockNavigationService));
y reescribiendo la definición de servicio como:
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); })
Pero esto último parece detener el servicio creado por la DI como todos.
¿Alguien sabe cómo puedo burlarme de los servicios inyectados para mis pruebas unitarias?
Gracias
David