Angular新手运行Karma-Jasmine单元测试遇[$injector:nomod]错误求助
解决Karma-Jasmine测试中的[$injector:nomod]模块未找到错误
嘿,刚接触Angular和Karma确实容易踩这种配置坑,我来帮你一步步解决这个问题~
这个错误的核心原因很明确:Karma在运行测试时,找不到名为app的Angular模块。可能是拼写问题、文件没加载,或者模块定义本身有问题,下面是具体的排查和解决步骤:
检查模块名拼写一致性
确保你在测试文件里引用的模块名,和实际项目中定义的模块名完全一致。比如:- 主模块文件(比如
app.js)里的定义是angular.module('app', []) - 测试文件里的
beforeEach(module('app'))必须和这个名字完全匹配,大小写、字符都不能错,别写成App或者application。
- 主模块文件(比如
确认Karma配置加载了主模块文件
打开你的karma.conf.js,找到files数组,必须把你的主模块文件(比如app.js)添加进去,否则测试环境根本不知道这个模块的存在。示例配置如下:module.exports = function(config) { config.set({ // 其他配置... files: [ // 先加载Angular核心和mocks文件 'node_modules/angular/angular.js', 'node_modules/angular-mocks/angular-mocks.js', // 然后加载你的主模块文件 'src/app.js', // 最后加载所有测试文件 'src/**/*.spec.js' ], // 其他配置... }); };确保测试文件正确引入模块
在你的.spec.js测试文件开头,一定要通过beforeEach(module('app'))来引入目标模块,示例代码:describe('示例组件测试', () => { // 先引入app模块 beforeEach(module('app')); let $controller; beforeEach(inject((_$controller_) => { $controller = _$controller_; })); // 你的测试用例... it('应该初始化正确', () => { const controller = $controller('ExampleController'); expect(controller).toBeDefined(); }); });检查模块定义是否正确
确认你的主模块是定义而不是获取状态。正确的模块定义写法是:// 定义带依赖的app模块 angular.module('app', ['ngRoute']);如果你写成
angular.module('app'),这是尝试获取已定义的模块,如果之前没有定义过,就会触发这个错误。
另外小提示:从错误信息看你用的是AngularJS 1.6.9,记得确保angular-mocks的版本和AngularJS主版本完全一致,版本不匹配也可能导致注入相关的奇怪问题。
内容的提问来源于stack exchange,提问作者Ankit Prajapati
相关产品推荐
相关产品推荐

