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

Leo*_*ban 1 javascript testing mocha.js chai

在此处输入图片说明

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

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

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

在此处输入图片说明

我工厂的代码

var alerts = [];

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

function returnAlerts() {
    return alerts;
}
Run Code Online (Sandbox Code Playgroud)

ssu*_*ube 6

因为[] !== [] && [] != []。JS 对象彼此之间不是松散或严格相等的,因此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])
Run Code Online (Sandbox Code Playgroud)