将一个模拟对象注入到AngularJS服务中。

11 浏览
0 Comments

将一个模拟对象注入到AngularJS服务中。

我有一个编写好的AngularJS服务,我想对它进行单元测试。

angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
    factory('myService', function ($http, fooService, barService) {
    this.something = function() {
        // 使用注入的服务做一些事情
    };
    return this;
});

我的app.js文件已注册了这些内容:

angular
.module('myApp', ['fooServiceProvider','barServiceProvider','myServiceProvider']
)

我可以测试DI是否起作用,例如:

describe("使用DI框架", function() {
    beforeEach(module('fooServiceProvider'));
    beforeEach(module('barServiceProvider'));
    beforeEach(module('myServiceProvder'));
    var service;
    beforeEach(inject(function(fooService, barService, myService) {
        service=myService;
    }));
    it("可以被实例化", function() {
        expect(service).not.toBeNull();
    });
});

这证明了服务可以被DI框架创建,但接下来我想对该服务进行单元测试,这意味着模拟注入的对象。

我该如何做呢?

我尝试将我的模拟对象放入模块中,例如:

beforeEach(module(mockNavigationService));

并且将服务定义重写为:

function MyService(http, fooService, barService) {
    this.somthing = function() {
        // 使用注入的服务做一些事情
    };
});
angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
    factory('myService', function ($http, fooService, barService) { return new MyService($http, fooService, barService); })

但后者似乎完全阻止了DI创建服务。

有人知道我如何为单元测试模拟注入的服务吗?

谢谢

大卫

0