业力开始 - 传递参数

时间:2016-08-10 14:27:58

标签: angularjs unit-testing karma-runner karma-jasmine

有没有办法通过Karma命令行传递参数,然后在测试中的某处读取?例如,这就是想要的:

karma start -branding="clientX"

然后在我的规范中某处我需要访问此变量(我需要" clientX"值)。

这有可能吗?

2 个答案:

答案 0 :(得分:27)

可以将参数传输到测试用例。这可能有点棘手。您可以做的是检查测试套件中的__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

完整示例

此示例针对Karama 1.1.x和Karma 1.2.0进行了测试。它显示了我上面讨论过的相同方法,可以让命令行参数通过client.args。这适用于karma startkarma run。我还添加了一种传递值的方法,而不通过client.argsbranding示例)。但是,此方法不适用于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才能在测试中看到。

答案 1 :(得分:-1)

是的,这是可能的。您所要做的就是在client的{​​{1}}部分中指定该参数:​​

karma.conf.js

传递它:

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