如何在karma.conf.js中对所有浏览器运行测试,而不是将所有浏览器都设置为默认值,或者必须在命令行中列出所有浏览器?

时间:2016-08-07 15:35:21

标签: karma-runner

我有一个karma.conf.js,它定义了浏览器和许多用于在浏览器堆栈上进行测试的自定义启动器:

browsers: ["Chrome", "Firefox"],
customLaunchers: {
  IE11: {
    base: "BrowserStack",
    browser: "IE",
    browser_version: "11",
    os: "Windows",
    os_version: "10",
  },
  IE10: {
    base: "BrowserStack",
    browser: "IE",
    browser_version: "10",
    os: "Windows",
    os_version: "8",
  },
  // ...
}

大多数时候我只想针对Chrome和Firefox运行,但有一段时间我想让测试针对配置已知的所有浏览器运行。

我知道我可以将customLaunchers的所有密钥放在browsers中,但这不是一个很好的选择,因为这意味着大部分时间我都必须通过--browsers来限制运行Chrome和Firefox。

我知道我可以列出命令行上的所有浏览器,但这很麻烦,因为列表中有11个项目,并且随着时间的推移会增长得更长。

那么有没有办法告诉Karma“对抗karma.conf.js所有你知道的发射器”?我检查了文档,搜索过的问题和SO,但没有发现任何内容。

1 个答案:

答案 0 :(得分:0)

我知道没有内置选项。但是,可以修改karma.conf.js文件以接受虚假的浏览器名称,例如all,可以用作karma.conf.js中的自定义代码应将配置设置为使用已知的所有浏览器的信号配置文件:

module.exports = function configure(config) {
  "use strict";
  var options = {
    basePath: "",
    // ...
    browsers: ["Chrome", "Firefox"],
    customLaunchers: {
      IE11: // ...
      IE10: // ...,
      // ...
    }
  };

  // If the user passed `--browsers all`, then we grab the list
  // from the `options` object and modify `config.browsers`.
  var browsers = config.browsers;
  if (browsers.length === 1 && browsers[0] === "all") {
    var newList = options.browsers.concat(Object.keys(options.customLaunchers));

    browsers.splice.apply(browsers, [0, browsers.length].concat(newList));
  }

  config.set(options);
}

options对象包含项目的配置。当用户在命令行上传递--browsers all时,config.browsers的值已就地修改以列出所有浏览器。请注意,必须对其进行修改。用新数组替换值是行不通的,可能是因为Karma在运行karma.conf.js之前存储了一个引用,然后使用该引用。此外,修改options.browsers的值无效,因为config.browsers具有优先权。 (否则,--browsers [...]不会覆盖通过karma.conf.js传递的配置中的内容。)