我正在尝试为我的 Angular.js 项目设置测试,但我不断收到“$injector:nomod, Module 'result' is not available!你要么拼错了......”错误。我确定我在“karma.config.js”内的“files”数组中包含“result”模块,基本上它看起来像这样:
files: [
'../javascripts/jquery-2.1.4.min.js',
'../jquery-ui/jquery-ui.min.js',
'../D3/d3.js',
'libs/angular.min.js',
'libs/angular-route.min.js',
'libs/angular-animate.min.js',
'libs/selectize.js',
'libs/angular-selectize.js',
'libs/angular-mocks.js',
'simulator.js',
'*.js',
'services/**/*.js',
'qa/tests-*.js'
],
...
我最初认为主模块的顺序:'simulator'(在 'simulator.js' 文件中定义)是错误的,所以我专门将它向上移动,在其他模块之前,如以下 stackoverflow 线程推荐:
Angular 模块在 Karma Jasmine 测试运行中不可用
它没有帮助。然后我尝试确保文件的导入顺序与我的 Angular 应用程序的主入口文件中的顺序相同(angular-mocks.js 和 qa/tests-*.js 除外),导入每个文件,而不是使用通配符,但没有成功。
Jasmine 确实进入了测试文件,但偶然发现了我试图导入模块“结果”的行:
describe('simulator.chartService', function() {
var chartService;
var graphConfig;
console.log("instantiating module result");
beforeEach(module('result'));
console.log("finished instantiating");
beforeEach(inject(function($injector) {
graphConfig = $injector.get('graphConfig');
chartService = $injector.get('chartService');
}));
it('should be created', function() {
expect(chartService.calcColors(10)).not.toBeNull();
});
});
所以,我看到错误发生在两个 console.log() 语句之间。
我怀疑我的文件在“karma.config.js”中的数组“files”中的排序仍然有问题。我有依赖于其他模块的主模块“模拟器”:
angular.module('simulator', ['ngRoute','ngAnimate','selectize','newexp2','newexp','login','edit','exps', 'result','templates','commons'])
模块'newexp2'、'newexp'、'login'、'edit'、'exps'、'result'、'templates'都依赖于模块'commons'。
如何在“文件”数组中正确导入相互依赖的模块?将“simulator.js”,主模块放在所有其他模块之上是否就足够了,或者我还需要将所有其他模块放在“commons.js”之前?
我的另一个怀疑是我从官方 angular 网站“angular-mocks.js”下载的 angular.js 库版本可能与我正在使用的其他模块不兼容。我以前对“angular-animate.js”文件有过这样的问题。
只要我用我的测试代码包围$(function(){...})
(并且我的所有其他模块都被它包围)它在导入模块时不会产生错误result
,所以我开始看到两个console.log()
语句之间没有错误,但是,这会产生一些未知完全阻止我调用该it
部分的错误,而当我没有用 包围它时$(function(){...})
,将it
调用测试,但模块result
导入失败。
到目前为止,我几乎被卡住了,不知道该去哪里以及该尝试什么。任何建议将不胜感激。