我使用BrowserStack来运行我的测试自动化 - 他们的网站上有一个配置示例来设置“commonCapabilities”。
我知道这是基本的JS,但是这个for循环中双管的用途是什么?
// Code to support common capabilities
exports.config.multiCapabilities.forEach(function(caps){
for(var i in exports.config.commonCapabilities) caps[i] = caps[i] || exports.config.commonCapabilities[i];
});
完整配置:
https://www.browserstack.com/automate/protractor
exports.config = {
'seleniumAddress': 'http://hub-cloud.browserstack.com/wd/hub',
'commonCapabilities': {
'browserstack.user': 'xxxx',
'browserstack.key': 'xxxx'
},
'multiCapabilities': [{
'browserName': 'Chrome'
},{
'browserName': 'Safari'
},{
'browserName': 'Firefox'
},{
'browserName': 'IE'
}]
};
// Code to support common capabilities
exports.config.multiCapabilities.forEach(function(caps){
for(var i in exports.config.commonCapabilities) caps[i] = caps[i] || exports.config.commonCapabilities[i];
});
答案 0 :(得分:0)
这是一个更容易阅读的表达式:
for(var i in exports.config.commonCapabilities) {
caps[i] = (caps[i] || exports.config.commonCapabilities[i]);
}
这意味着如果可以转换为true,则返回caps[i]
;否则,返回exports.config.commonCapabilities[i]
。如果caps[i]
未定义,因为这是一个假值,它会将变量设置为exports.config.commonCapabilities[i]
。这是确定每个定义的方法,否则回退到某个标准配置。
答案 1 :(得分:0)
这一部分:caps[i] = caps[i] || exports.config.commonCapabilities[i]
基本上表示如果caps[i]
未定义(或null,false,0,NaN,“”(不是假值)),则运行caps[i] = exports.config.commonCapabilities[i]
。< / p>
例如:
var x = x || "value"
具有与
相同的功能if(x){/*nothing as it is already assigned*/} else {x = "value"}
如果第一个值为false,则检查第二个值。如果是,则返回true,如果为false,则返回false。 如果第一个值为true,则无论第二个值是什么,它总是返回true。来自here