我编写了一个 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 框架创建,但是接下来我想对服务进行单元测试,这意味着模拟注入的对象。
我该怎么做?
我试过将我的模拟对象放在module中,例如
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 创建的服务。
有谁知道我如何为我的单元测试模拟注入的服务?
谢谢
大卫