You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:19:10