业力开始 - 传递参数

Wag*_*lva 6 unit-testing angularjs karma-runner karma-jasmine

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

karma start -branding="clientX"
Run Code Online (Sandbox Code Playgroud)

然后在我的规范的某个地方我需要访问这个变量(我需要"clientX"值).

这有可能吗?

Lou*_*uis 28

可以将参数传输到测试用例.这可能有点棘手.您可以做的是检查__karma__.config.args您的测试套件:

it("get karma args", function () {
    console.log(__karma__.config.args);
});
Run Code Online (Sandbox Code Playgroud)

karma run

如果你想传递参数karma run,那么上面就是你所需要的.

然后,如果你这样做karma start,那么karma run -- --foo你应该在控制台上看到:

LOG: ['--foo']
Run Code Online (Sandbox Code Playgroud)

注意传递给的参数是如何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"] : [],
    },
Run Code Online (Sandbox Code Playgroud)

如果你运行karma start --single-run --foo,那么你将获得与run之前相同的输入.

如果我必须传递多个参数,我会扫描process.argv过滤掉那些只是为了Karma的好处并将其余部分传递给args而不是测试每种可能性的部分.

你可以从上面的,当你已经推断出karma start --single-run --something的参数作为最终config.somethingkarma.conf.js.

完整的例子

此示例针对Karama 1.1.x和Karma 1.2.0进行了测试.它显示了我上面讨论的相同方法,以获取命令行参数client.args.这适用于karma startkarma 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
  });
};
Run Code Online (Sandbox Code Playgroud)

test/test.js:

it("get karma arg", function () {
    console.log("BRANDING", __karma__.config.branding);
    console.log("ARGS", __karma__.config.args);
});
Run Code Online (Sandbox Code Playgroud)

如果你跑karma start --single-run --foo --branding=q,你得到:

LOG: 'BRANDING', 'q'
LOG: 'ARGS', ['--foo']
Run Code Online (Sandbox Code Playgroud)

如果您启动Karma然后使用karma run -- --foo --branding=q,您会得到:

LOG: 'BRANDING', undefined
LOG: 'ARGS', ['--foo', '--branding=q']
Run Code Online (Sandbox Code Playgroud)

如上所述,在使用时karma run,一切都必须config.args在测试中可见.