可以将参数传输到测试用例。这可能有点棘手。你可以做的是在你的测试套件中检查__karma__.config.args:
it("get karma args", function () {
console.log(__karma__.config.args);
});
karma run
如果你想用karma run 传递参数,那么以上就是你所需要的。
然后,如果您执行karma start,然后执行karma run -- --foo,您应该会在控制台上看到:
LOG: ['--foo']
注意传递给karma run 的参数是如何以__karma__.config.args 结尾的。另请注意,karma run -- --foo 中的第一个双破折号用于将 Karma 参数与“客户端参数”分开,这是必要的。 (karma start 没有同样的区别。)
karma start
karma start 的工作方式不同。
如果您使用由karma init 创建的默认karma.conf.js,您将无法通过karma start --single-run --foo 以这种方式传递参数。您需要修改 karma.conf.js 以传递参数:
module.exports = function(config) {
config.set({
client: {
args: config.foo ? ["--foo"] : [],
},
如果您运行karma start --single-run --foo,那么您将获得与之前run 相同的输入。
如果我必须传递多个参数,我会扫描 process.argv 以过滤掉其中仅用于 Karma 的部分,并将其余部分传递给 args,而不是测试每种可能性。
您可能从上面推断出,当您 karma start --single-run --something 时,参数在 karma.conf.js 中以 config.something 结尾。
完整示例
本示例针对 Karama 1.1.x 和 Karma 1.2.0 进行了测试。它显示了我上面讨论过的相同方法来获取命令行参数以通过client.args 传输。这适用于karma start 和karma run。我还添加了一种无需通过client.args 即可传递值的方法(即branding 示例)。但是,此方法不适用于karma run。
karma.conf.js:
module.exports = function(config) {
config.set({
basePath: '',
client: {
// Example passing through `args`.
args: config.foo ? ["--foo"] : [],
// It is also possible to just pass stuff like this,
// but this works only with `karma start`, not `karma run`.
branding: config.branding,
},
frameworks: ['jasmine'],
files: [
'test/**/*.js'
],
exclude: [],
preprocessors: {},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
};
test/test.js:
it("get karma arg", function () {
console.log("BRANDING", __karma__.config.branding);
console.log("ARGS", __karma__.config.args);
});
如果你运行karma start --single-run --foo --branding=q,你会得到:
LOG: 'BRANDING', 'q'
LOG: 'ARGS', ['--foo']
如果你启动 Karma 然后使用karma run -- --foo --branding=q,你会得到:
LOG: 'BRANDING', undefined
LOG: 'ARGS', ['--foo', '--branding=q']
如上所述,使用karma run时,所有内容都必须经过config.args才能在测试中可见。