AngularJSサービスを作成しており、それを単体テストしたいと思います。
angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
factory('myService', function ($http, fooService, barService) {
this.something = function() {
// Do something with the injected services
};
return this;
});
私のapp.jsファイルにはこれらが登録されています:
angular
.module('myApp', ['fooServiceProvider','barServiceProvider','myServiceProvider']
)
DIが機能していることをテストできます。
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();
});
});
これにより、サービスをDIフレームワークで作成できることが証明されましたが、次にサービスの単体テストを行います。つまり、注入されたオブジェクトをモックアウトします。
これを行うにはどうすればよいですか?
私はモックオブジェクトをモジュールに入れてみました、例えば
beforeEach(module(mockNavigationService));
サービス定義を次のように書き換えます。
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); })
しかし、後者は、DIによって作成されているサービスをすべて停止するようです。
ユニットテストに注入されたサービスをモックする方法を誰かが知っていますか?
ありがとう
デビッド