【问题标题】:Yet another 'module is not defined' in KarmaKarma 中的另一个“未定义模块”
【发布时间】:2016-01-04 19:59:02
【问题描述】:

我对 angularjs 很陌生,我正在尝试使用 Jasmine 和 Karma 测试一个应用程序。如果我只使用 Jasmine 提供的基本框架(使用 SpecRunner.html),测试就可以正常工作,但是当我尝试使用 Karma 时,我不断收到相同的“未定义模块”消息。

我在karma.conf.js中的文件依赖如下:

files: [
  '../../js/angular.min.js',
  '../../js/angular-sanitize.min.js',
  'lib/angular-mocks.js',
  '../../js/app.js',
  'lib/jasmine-2.4.1/jasmine.js',
  'lib/jasmine-2.4.1/jasmine-html.js',
  'lib/jasmine-2.4.1/boot.js',
  'lib/jquery-1.11.3.min.js',
  'spec/spec.js'
]

到目前为止,这看起来与我在 SO 上看到的所有以前的业力未定义模块问题完全一样,除了我很确定 angular-mocks.js 包含在内,文件位置正确,而且我没有使用任何可能覆盖 karma.conf.js 的其他框架。我很抱歉再次问同样的问题,但我在这里遗漏了一些非常明显的东西吗?

【问题讨论】:

  • 您收到的确切错误消息是什么?
  • @Jon 'ReferenceError: module is not defined',可追溯到 angular-mocks.js 和 jasmine。我会发布更完整的跟踪,但在遵循 Nocomm 的解决方案后我似乎无法重现错误......

标签: javascript angularjs unit-testing jasmine karma-jasmine


【解决方案1】:

过去我在 Karma 上遇到过类似的问题。您将依赖项放入的顺序很挑剔。例如,如果您使用的是 JQuery 和 Angular,那么 Karma 将在 Angular 之前使用 JQuery。我看到您将 Angular 放在其所有子模块之前,这很棒。

我会按以下顺序放置依赖项:

files: [
  'lib/jquery-1.11.3.min.js',
  '../../js/angular.min.js',
  '../../js/angular-sanitize.min.js',
  'lib/angular-mocks.js',
  'lib/jasmine-2.4.1/jasmine.js',
  'lib/jasmine-2.4.1/jasmine-html.js',
  'lib/jasmine-2.4.1/boot.js',
  '../../js/app.js',
  'spec/spec.js'
]

我在同一个应用程序中使用 Angular 模块的缩小和未缩小版本时也遇到了问题。例如,如果你想使用 Angular 的缩小版本,那么确保它的所有子模块也都被缩小了。对于任何 JavaScript 依赖项,我都会这么说。保持一致。

【讨论】:

  • 这样的问题就是为什么值得考虑使用 RequireJS 的原因,即使只是为了你的测试。 Karma 模块必须按照所需依赖项的顺序加载所有这些脚本文件。一旦遇到两个不同模块使用相互冲突的依赖项的情况(这对整个应用程序来说很好),您就会发现需要 RequireJS。
  • 这很好。很难跟上所有的 JS 工具和框架。它们太多了,我没有时间研究/使用 RequireJS。
  • 当我意识到在配置文件中使用通配符导致我的一些 js 以错误的顺序加载时,我以为我很聪明,但我从没想过 jquery 是其中的一部分!好吧,我都改变了我的依赖顺序,并指向了一个 unmin'd 版本的 angular.js,这似乎已经解决了模块问题。但由于某种原因,即使在恢复这些更改之后,我也无法重现该错误。我收到“TypeError: Cannot read property '$injector' of null”消息,但我想这是我必须弄清楚的其他事情。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多