有没有办法通过 Karma 命令行传递参数,然后在测试中的某处读取它?例如,这是想要的:
karma start -branding="clientX"
然后在我的规范中的某个地方,我需要访问这个变量(我需要“clientX”值)。
这可能吗?
最佳答案
可以将参数传输到测试用例。这可能有点棘手。您可以做的是检查 __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.conf.js
创建者 karma init
,您将无法通过执行 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
参数最终为 config.something
在 karma.conf.js
.完整示例
此示例针对 Karma 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
在测试中可见。
关于angularjs - karma 开始 - 传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38876237/