在角度单位测试中无法使用ng-mock访问模块

时间:2016-03-08 00:15:15

标签: unit-testing karma-runner angular-mock

我正在使用Karma和Jasmine进行单元测试。但是,我无法在单元测试中模拟或获取模块。我一直得到同样的错误

 Error: [$injector:modulerr] Failed to instantiate module ha.module.core due to:
 Error: [$injector:nomod] Module 'duScroll' is not available! You either
misspelled the module name or forgot to load it. If registering a module  
ensure that you specify the dependencies as the second argument.

但是,我在topEach函数中注入模块

    angular.mock.module('duScroll');
    angular.mock.module('ui.router');
    angular.mock.module('ha.module.utility');
    angular.mock.module('ha.module.core'); 

在我的karma.config文件中,我需要js文件

 files: [
    '../node_modules/jquery/dist/jquery.js',
    '../node_modules/angular/angular.js',
    '../node_modules/angular-mocks/angular-mocks.js',
    'src/modules/utility/module.utility.built.js',
    'src/modules/utility/services/*.js',
    'src/modules/core/module.core.built.js',
    'src/modules/**/**/*.js',
    'src/modules/core/**/*.js',
    '../Templates/**/*.html',
    'tests2/**/*.js',
],

我附上了一个屏幕截图,以显示当我经营业力时出现的情况。我正在将文件显示在我的开发人员工具中。

enter image description here

我只能想知道是否还有其他一些必须做的事情来启动模块以运行测试?文件在角度和角度模拟之后加载,并在我的测试文件夹之前加载。不知道为什么我不能拿到模块。

1 个答案:

答案 0 :(得分:0)

您无需致电angular.mock.module,只需为您要模拟的每个模块调用beforeAll(module('<module-name>'))即可。

然后,要在之后注入您的控制器,您必须使用

beforeEach(inject(function(_$controller_){
  // The injector unwraps the underscores (_) from around the parameter names when matching
  $controller = _$controller_;
}));

来自https://docs.angularjs.org/guide/unit-testing#testing-a-controller的消息。请访问它以获取更多信息。