我有一个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,但没有发现任何内容。
答案 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
传递的配置中的内容。)