给予" karma运行的客户端参数(clientArgs)"当我使用RequireJS时没有任何效果

时间:2016-06-28 13:28:19

标签: requirejs karma-runner karma-requirejs

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

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

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

karma run

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

1 个答案:

答案 0 :(得分:1)

解释

这是karma init如何生成用于配置RequireJS并启动测试的test-main.js文件的问题。问题是特定于Mocha,但最有可能发生在接受通过clientArgs传递的参数的其他参赛者。

test-main.js生成的karma init实际上已被破坏。 {3}当Karma单独调用start时,会使用自己的配置调用

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

但是,由test-main.js创建的karma init调用start而没有任何参数,这就是为什么你的插件没有得到它应该得到的参数。

解决方案

修改您的test-main.js以在RequireJS配置中拥有此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);
},