如何在注入之前模拟Angular模块?

时间:2015-03-10 16:21:35

标签: angularjs unit-testing testing dependency-injection

我的应用程序中有以下依赖项:

angular.module 'MyApplication.NetworkingModule', ['ngResource']
       .value  'NetworkingValues'

angular.module  'MyApplication.MyModule', []
       .factory 'MySpecificResource', ['NetworkingValues',   ...]
       .factory 'MyService',          ['MySpecificResource', ...]

所以MySpecificResource取决于NetworkingValues

问题是我想在测试资源中使用它们之前模拟其中的一些值。

这样做:

  beforeEach module 'MyApplication.NetworkingModule'
  beforeEach module 'MyApplication.MyModule'

导致factory立即被调用,我没有机会替换部分NetworkingValues

beforeEach inject (@MyService, @NetworkingValues) ->

MyService取决于MySpecificResource,这取决于我想在测试前存根的NetworkingValues

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

Have you tried something along these lines?

 var mockedValues;
 beforeEach(module(function($provide) {
        $provide.value('NetworkingValues',mockedValues);
 }));

 beforeEach(inject(function(_NetworkingValues_) {

    mockedValues = {....};

 }));

$ provide将提供mockedValues而不是实际的NetworkingValues。

答案 1 :(得分:0)

所以我的最终解决方案是提供常量并将其与module函数一起注入:

beforeEach module "MyApplication.NetworkingModule", ($provide) ->
  $provide.constant 'NetworkingValues', endpointGet: 'my-endpoint/:id'