如何在对所有数据进行验证后没有匹配的情况下对阵列进行断言并失败

时间:2017-10-03 21:40:07

标签: arrays node.js nightwatch.js assertions assertj

我正在使用NightwatchJs框架进行测试。我需要将实际值与一组有效值进行比较。但是,当前实现会抛出多个失败,而在预期的结果数组中找到正确的值。我想显示测试的输出,只有当NO值匹配或测试通过时才会显示。

鉴于我有以下数组:

var topDesktop = [['728', '90'], ['970', '250'], ['970', '90'], ['980', '250'], ['980', '240'], ['980', '120'], ['980', '90'], ['1000', '90'], ['1000', '300']];

我想知道当前值是否在允许的值内(topDesktop数组)。

var actual = result.toString();
    for(var i = 0; i < topDesktop.length; i++){
      client.assert.equal(actual, topDesktop[i]);
    }

输出显而易见是for循环的结果:

✔ Passed [equal]: 728,90 == [ '728', '90' ]
✖ Failed [equal]: ('728,90' == [ '970', '250' ])  - expected "970,250" but got: "728,90"
✖ Failed [equal]: ('728,90' == [ '970', '90' ])  - expected "970,90" but got: "728,90"
✖ Failed [equal]: ('728,90' == [ '980', '250' ])  - expected "980,250" but got: "728,90"
.
.
.

我想避免的是每场比赛尝试失败。有什么好主意吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你想知道实际值是否在预期值之一。如果是这样,您可以执行以下操作:

var actual = result.toString();
var isFound = false;
for(var i = 0; i < topDesktop.length; i++) {
    if(actual == topDesktop[i]) {
        isFound = true;
        break;
    }
}
client.assert.equal(isFound, true);

像这样,如果找到了值,它就不会继续检查,因为break会停止for循环,最后你会检查是否找到了值。

答案 1 :(得分:0)

过滤掉你想要的元素。确保至少存在一个

client.assert(topDesktop.filter(e => actual == e).length > 0)