【问题标题】:How to mock Angular modules before injecting?如何在注入之前模拟 Angular 模块?
【发布时间】:2015-03-10 16:21:35
【问题描述】:

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

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

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

【问题讨论】:

    标签: angularjs unit-testing testing dependency-injection


    【解决方案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。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-12-02
        • 1970-01-01
        • 2015-04-23
        • 2011-11-09
        • 2015-09-11
        • 1970-01-01
        • 2016-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多