为什么这个测试失败了?数组应该等于[]

时间:2016-06-02 16:42:01

标签: javascript testing mocha chai

enter image description here

我的测试,在alerts var之下是一个空数组[]但是这会引发错误。

it('FeedFactory alerts array is filled', function() {
    var alerts = FeedFactory.returnAlerts();
    console.log('alerts',alerts);
    expect(alerts).to.equal([]);
});

当我注释掉最后一个expect(alerts).to.equal([]);行时,这是测试日志。

enter image description here

我工厂的代码

var alerts = [];

var feedFactory = {
    alerts       : alerts,
    getFeed      : getFeed,
    returnAlerts : returnAlerts,
    saveFilters  : saveFilters,
    getFilters   : getFilters
};

function returnAlerts() {
    return alerts;
}

2 个答案:

答案 0 :(得分:4)

因为[] !== [] && [] != []。 expect([]).to.equal([])将始终失败。

您应该使用更深层次的平等,例如deep(或其令人困惑的简写,eql)或members

expect([1, 2, 3]).to.deep.equal([1, 2, 3])
expect([1, 2, 3]).to.include.members([1, 2])

答案 1 :(得分:1)

两个空数组彼此不相等,因为每个数组都有不同的引用,因为所有对象(以及相关的数组)都被引用而不是被复制。 检查对象是否相等是检查引用而不是内部内容

昂斯:

var a = [];
var b = [];
console.log(a == b) //false

我会使用alerts数组的长度来测试它是否为空数组。写作:

expect(alerts.length).to.equal(0);

为了检查数组的内容是否等于另一个数组的另一个内容,你必须使用深度检查,它检查数组的每个值是否等于另一个数组中的那个(非常昂贵)。