我尝试传递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
答案 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);
},