【问题标题】:Chutzpah - Module is not availableChutzpah - 模块不可用
【发布时间】:2026-02-05 11:25:02
【问题描述】:

我正在尝试使用 Jasmine 和 Chutzpah 测试运行器对一些角度代码进行单元测试。 我有一个有很多依赖项的模块:

angular.module('app', ['ngRoute', 'ngSanitize', '7minWorkout', 'WorkoutBuilder', 'mediaPlayer', 'ui.bootstrap', 'LocalStorageModule', 'ngAnimate', 'ngMessages', 'ngResource']);

我尝试像这样加载依赖项:

beforeEach
    (function(){
        angular.mock.module('ngRoute', []);
        angular.mock.module('ngSanitize', []);
        angular.mock.module('WorkoutBuilder', []);
        angular.mock.module('mediaPlayer', []);
        angular.mock.module('ui.bootstrap', []);
        angular.mock.module('LocalStorageModule', []);
        angular.mock.module('ngAnimate', []);
        angular.mock.module('ngMessages', []);
        angular.mock.module('ngResource', []);
        angular.mock.module('7minWorkout', []);
        module('app');
    });  

当我尝试使用 Chutzpah 运行单元测试时,我收到以下错误:

** 模块“app”不可用!您要么拼错了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。**

我也尝试像这样指定依赖项:

beforeEach(function(){
...
  module('app', [...... long list of dependencies])
})

还是没有结果。 我找到了一些关于此类问题的 karma test runner 的文章,但没有找到 Chutzpah 的任何文章。有任何想法吗 ?谢谢。

【问题讨论】:

  • 你能在 chutzpah github 页面上提交一个问题吗?

标签: angularjs unit-testing jasmine chutzpah


【解决方案1】:

我在模块依赖方面遇到了同样的问题并找到了解决方案。依赖项在单独的 js 文件中定义,例如 ngSanitize。因此,将它们添加到测试文件的开头,如下所示:

/// <reference path="../../../../bower_components/angular-sanitize/angular-sanitize.js" />

您只需按如下方式模拟您的模块:

beforeEach
(function(){
    module('app');
});  

或更短的版本:

beforeEach(module('app'));  

希望对你有帮助

【讨论】:

    【解决方案2】:

    我有同样的问题。在我的测试文件的开头有下一个顺序的引用:

    /// <reference path="../app/app.controller.js" /> /// <reference path="../app/app.module.js" /> /// <reference .........

    错误是因为app.controller.js 中的代码在app.module.js 中声明之前使用了模块'app'。为了解决这个问题,我将app.module.js 放在所有其他我的 .js 引用之前:

    /// <reference path="../app/app.module.js" /> /// <reference path="../app/app.controller.js" /> /// <reference .........

    【讨论】: