angularjs - karma 开始 - 传递参数

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

有没有办法通过 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 startkarma 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.somethingkarma.conf.js .

完整示例

此示例针对 Karma 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
  });
};
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/

相关文章:

javascript - 在 $scope-variable 变化时调用 Angular-function

objective-c - 期望进行单元测试时iOS8访问错误异常

c - 如何使用 DejaGnu 设置单元测试

c# - 可以模拟自定义属性 c# 吗?

javascript - Angularjs 测试返回静态数据的简单工厂

javascript - 如何清除 mac 上的 phantomjs 缓存?

javascript - 等待窗口完成自行调整大小,然后在 Angular 中执行某些操作

javascript - Jasmine 测试中未调用 AngularJS 指令链接函数

dependencies - 排除 npm 模块依赖?

javascript - 使用另一个 ng-click 覆盖点击(例如 ng-click)