【问题标题】:Getting "module not defined" error when using Gulp to run karma tests使用 Gulp 运行业力测试时出现“模块未定义”错误
【发布时间】:2014-12-08 19:15:02
【问题描述】:

我的团队正在努力从 Grunt 迁移到 Gulp。我有一个运行良好的 Grunt 测试任务,但是当我尝试运行测试(使用 gulp-karma)时,我收到一条错误消息“ReferenceError:找不到变量:模块”

我在 Google 上搜索并发现很多帖子说要检查我的 angular-mocks.js 文件的位置,并且它在正确的空间中(我的 Grunt 任务对于相同的代码确实工作)。

为了验证它在我的代码中没有什么奇怪的,启动了一个新的 yo angular 应用程序并能够复制错误。

我的猜测是我缺少配置值或步骤或其他内容。有什么建议吗?

谢谢。

【问题讨论】:

  • 你能分享你的任何代码吗?我的预感是,如果您使用 yeoman gulp 生成器通过 Gulp 运行测试,那么您还没有将文件加载到 unit-test.js。这是我没有看到代码的唯一猜测。
  • @mcranston18 当然,我可以分享您从我创建的空项目中看到的任何内容。你需要什么?
  • 您是否有指向可以重现该问题的 GitHub 存储库的链接?
  • @JayHarris 是的,github.com/JamesBender/GulpTest

标签: angularjs gulp karma-runner


【解决方案1】:

@mcranston18 的回答绝对有效。但作为替代选项,gulp-karma 目前是一个不必要的插件。 gulp 的部分优势在于,您不必为任何事情都使用插件。相反,您可以直接连接到karma

var gulp = require('gulp');
var karma = require('karma').server;

gulp.task('tests', function(done) {
  return karma.start({
      configFile: __dirname + '/test/karma.conf.js',
      singleRun: true
    }, done);
});

【讨论】:

  • 从来没有想过这个,这似乎是一个更可取的解决方案。如果生成器使用这种方法会很好。
  • 我收到以下错误:TypeError: Object # has no method 'start'
  • 你是否通过 NPM 安装了karma
【解决方案2】:

当您运行 gulp tests 时,gulp-karma 会在 gulpfile.js 中查找文件,而不是您定义的 karma.conf.js。请记住,当您返回 gulp.src(tests) 时,您传递的是测试通过所需的文件数组。

要解决您的问题,请在您的 gulpfile.js 中更新您的 tests 数组以包含您的 bower 文件、应用程序文件和测试文件:

var tests = [
  'bower_components/angular/angular.js',
  'bower_components/angular-mocks/angular-mocks.js',
  'bower_components/angular-animate/angular-animate.js',
  'bower_components/angular-cookies/angular-cookies.js',
  'bower_components/angular-resource/angular-resource.js',
  'bower_components/angular-route/angular-route.js',
  'bower_components/angular-sanitize/angular-sanitize.js',
  'bower_components/angular-touch/angular-touch.js',
  'app/scripts/app.js',
  'app/scripts/**/*.js',
  'test/mock/**/*.js',
  'test/spec/**/*.js'
];

您可以删除karma.conf.js 中的files 数组,因为它们不需要。

(p.s. 我还引用了 app.js,因为 app/scripts/**/*.js 不会匹配需要首先加载的 app.js)

【讨论】:

  • 这在gulp-karma#27 中也有说明,是gulp-karma 的主要问题之一。他们正在研究潜在的解决方案。
  • 顺便说一句,如果你想在 karma.conf.js 中定义你的文件,你可以将一个空数组传递给 gulp.src(即return gulp.src([])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 2014-07-12
  • 2021-02-26
  • 2014-10-01
  • 2021-06-03
  • 2018-05-29
相关资源
最近更新 更多