karma start - 传递参数
karma start - passing parameters
有没有办法通过 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 参数与 "client arguments" 分开,这是必要的。 (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
才能在测试中可见。
是的,这是可能的。您所要做的就是在 karma.conf.js
的 client
部分中指定该参数:
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
plugins: [
...
],
client: { //Put the parameters here
codeCoverage: config.cc,
testSuite: config.testSuite
},
...
通过它:
karma start --cc --testSuite=sanity
请注意,如果您不给参数赋值(如 --cc
),它将被设置为 true
。
要从测试中访问它:
console.log('Coverage: ', __karma__.config.codeCoverage);
console.log('Test suite: ', __karma__.config.testSuite);
有没有办法通过 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 参数与 "client arguments" 分开,这是必要的。 (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
才能在测试中可见。
是的,这是可能的。您所要做的就是在 karma.conf.js
的 client
部分中指定该参数:
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
plugins: [
...
],
client: { //Put the parameters here
codeCoverage: config.cc,
testSuite: config.testSuite
},
...
通过它:
karma start --cc --testSuite=sanity
请注意,如果您不给参数赋值(如 --cc
),它将被设置为 true
。
要从测试中访问它:
console.log('Coverage: ', __karma__.config.codeCoverage);
console.log('Test suite: ', __karma__.config.testSuite);