0

我正在尝试传递grep参数,以便karma-mocha插件将其传递给 Mocha 并仅运行匹配的测试grep。命令行是这样的:

./node_modules/.bin/karma run -- --grep='one'

但是,Karma 实际上会检查所有测试,就像我不使用--grep. 根据karma run --help,之后的一切都--应该是客户参数。clientArg(它在帮助和关于如何运行的讨论中被提及karma run。)我尝试了一个没有 RequireJS 的小项目,它成功了。似乎添加 RequireJS 会导致问题。这是一个重现该问题的小设置:

karma.conf.js

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['mocha', 'requirejs'],
    files: [
      'test-main.js',
      { pattern: 'test/**/*.js', included: false }
    ],
    exclude: [],
    preprocessors: {},
    reporters: ['progress'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: false,
    browsers: ['Chrome'],
    singleRun: false,
    concurrency: Infinity
  });
};

test-main.js

var allTestFiles = [];
var TEST_REGEXP = /(spec|test)\.js$/i;

Object.keys(window.__karma__.files).forEach(function (file) {
  if (TEST_REGEXP.test(file)) {
    var normalizedTestModule = file.replace(/^\/base\/|\.js$/g, '');
    allTestFiles.push(normalizedTestModule);
  }
});

require.config({
  baseUrl: '/base',
  deps: allTestFiles,
  callback: window.__karma__.start
});

您在此处看到的内容在功能上等同test-main.js于最初由karma init. 它仅被编辑以删除评论、规范空间和添加分号。

test/test.js文件包含:

it("one", function () {});
it("two", function () {});
4

1 回答 1

1

解释

这是如何karma init生成test-main.js用于配置 RequireJS 和启动测试的文件的问题。该问题并非特定于 Mocha,但很可能发生在其他接受通过clientArgs.

test-main.js生成的实际上karma init是坏的。您可以在这里看到,当 Karma自己调用时start它会使用自己的配置调用它

this.loaded = function () {
  // has error -> cancel
  if (!hasError) {
    this.start(this.config)
  }
[...]

但是,test-main.jscreated bykarma init调用start没有任何参数,这就是为什么你的插件没有得到它应该得到的参数的原因。

解决方案

修改你的在你的 RequireJS 配置test-main.js中有这个:callback

callback: window.__karma__.start.bind(window.__karma__, window.__karma__.config)

这将导致start以与前面显示的代码片段相同的方式调用。如果由于某种原因您不喜欢bind或需要在回调中做更多事情,您可以这样做:

callback: function () {
  // Other stuff...
  window.__karma__.start.call(window.__karma__, window.__karma__.config);
},
于 2016-06-28T13:28:18.847 回答