如何以角度模拟模块

时间:2016-05-07 23:40:30

标签: angularjs unit-testing

所以我读过很多帖子,但到目前为止没有任何建议。

我想要模拟一个模块 - 比如angular-foo。原始文件与其他所有内容一起加载。

angular.module('app', ['angular-foo'...

我想在我的业力/摩卡测试中模拟这个模块。我已经尝试过像这样称呼它的建议,但这是不行的。

beforeEach(module('app'));

beforeEach(module('angular-foo'))

如何完全阻止原始angular-foo运行(但它必须作为其余代码的一部分加载)?

2 个答案:

答案 0 :(得分:5)

要模拟factoryservicevalue服务,可以使用angular.mock.module object argument

beforeEach(module('app', 'angular-foo', {
  fooFactoryService: ...,
  fooValueService: ...
}));

要在配置阶段(constantprovider)模拟可用于注入的服务,应使用配置功能

beforeEach(module('app', 'angular-foo', ($provide) => {
  $provide.constant('fooConstantService', ...),
  $provide.provider('fooProviderService', ...),
}));

该行中的最后一个模块会覆盖其他模块中的服务。可以部分(使用$provide.decorator)或完全模拟服务。

如果angular-foo模块根本没有加载,但是其他模块使用它,可以在规范中完全重新定义它的模拟版本

angular.module('angular-foo', [])...
beforeEach(module('app', 'angular-foo'));

答案 1 :(得分:0)

我的诀窍是在模块声明之前放置提供程序:

  beforeEach(module(function($provide) {
    $provide.provider('myProvider', function() {
      return {
        myProviderFunction: function() {},

        $get: function () {
          return {
            myProviderFunction: function() {}
          };
        }
      };
    });
  }));

  beforeEach(module('myApp'));