将一个模拟对象注入到AngularJS服务中。
将一个模拟对象注入到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创建服务。
有人知道我如何为单元测试模拟注入的服务吗?
谢谢
大卫