Yazılı bir AngularJS hizmetim var ve birim testi yapmak istiyorum.
angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
factory('myService', function ($http, fooService, barService) {
this.something = function() {
// Do something with the injected services
};
return this;
});
App.js dosyam şu kayıtlı:
angular
.module('myApp', ['fooServiceProvider','barServiceProvider','myServiceProvider']
)
DI'nin şu şekilde çalıştığını test edebilirim:
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();
});
});
Bu, hizmetin DI çerçevesi tarafından oluşturulabileceğini kanıtladı, ancak daha sonra hizmeti birim test etmek istiyorum, bu da enjekte edilen nesnelerle alay etmek anlamına geliyor.
Bunu nasıl yapacağım?
Taklit nesnelerimi modüle koymayı denedim, örneğin
beforeEach(module(mockNavigationService));
ve hizmet tanımını şu şekilde yeniden yazarak:
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); })
Ancak ikincisi, DI tarafından yaratılan hizmeti durduruyor gibi görünüyor.
Birim testlerim için enjekte edilen hizmetlerle nasıl dalga geçebileceğimi bilen var mı?
Teşekkürler
David