首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AngularJS单元测试中模拟模块依赖项

在AngularJS单元测试中模拟模块依赖项
EN

Stack Overflow用户
提问于 2017-04-27 17:25:47
回答 1查看 2.2K关注 0票数 1

我有一个有许多模块的角1.5项目,每个模块可能依赖于其他模块。试着进行单元测试,比如控制器,它是模块的一部分,我会像这样导入模块:

代码语言:javascript
复制
angular.mock.module('SaidModule');

...then在需要时提供并注入其服务。

问题是SaidModule依赖于AnotherModule1AnotherModule2AnotherModule3.

代码语言:javascript
复制
angular.module('SaidModule', ['AnotherModule1', 'AnotherModule2', 'AnotherModule3']);

因此,自然地,当我调用SaidModule时,其他模块也会被调用,这超出了单元测试的范围

在单元测试中,我尝试了以下解决方案

代码语言:javascript
复制
angular.module('AnotherModule1',[]);
angular.module('AnotherModule2',[]);
angular.module('AnotherModule3',[]);
angular.mock.module('SaidModule');

虽然对于当前的单元测试,我已经成功地解耦了依赖项,我也破坏了实际的AnotherModule1、AnotherModule2、AnotherModule3,所以当它变成单元测试时,它们甚至在角度项目中都看不见,这在我看来是正确的。因为我使用angular.module来定义一个新模块,而这个模块恰好覆盖了实际的模块。不过,这个解决方案也建议在这里模拟模块依赖项。

在角文档中,如果传递了一个对象文本,则可以看到角文档模拟模块,每个键值对将通过$provide.value在模块上注册,键是字符串名(或令牌),以与注入器上的值相关联。

因此,在我看来,解决方案似乎是以某种方式使用angular.mock.module来覆盖依赖模块,但到目前为止,我还没有找到解决方案。任何帮助都很感激

EN

回答 1

Stack Overflow用户

发布于 2017-04-28 00:29:13

通过调用angular.module('AnotherModule1',[]),您将重新定义AnotherModule1,我认为这将导致下游问题。相反,对每个依赖服务使用$provide。没有必要模拟依赖模块。

假设您的控制器定义如下:

代码语言:javascript
复制
angular
  .module('SaidModule', ['AnotherModule1', 'AnotherModule2'])
  .controller('SaidController', [
    '$scope', 
    'AnotherService', 
    function($scope, AnotherService) {
      this.anotherService = AnotherService.helper();
    }
  );

那么您的测试可能看起来是:

代码语言:javascript
复制
describe('SaidController', function() {
  var controller, scope, AnotherService;

  beforeEach(module('SaidModule'));

  beforeEach(module(function($provide) {
    AnotherService = { helper: function() { return 0; } };
    $provide.value('AnotherService', AnotherService);
  }));

  beforeEach(inject(function($controller, $rootScope) {
    scope = $rootScope.$new();
    controller = $controller('SaidController', {
      $scope: scope
    });
  }));

  it('creates controller', function() {
    expect(controller).not.toBeNull();
  });
});

不需要模拟依赖模块,只需要模拟依赖服务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43664305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档