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

Javascript 为什么这个测试失败了?数组应等于[],javascript,testing,mocha.js,chai,Javascript,Testing,Mocha.js,Chai,在我的测试中,alerts变量下面是一个空数组[],但是这会抛出一个错误 it('FeedFactory alerts array is filled', function() { var alerts = FeedFactory.returnAlerts(); console.log('alerts',alerts); expect(alerts).to.equal([]); }); 这是我注释掉最后一个expectalerts.to.equal[]时的测试日志;线路

在我的测试中,alerts变量下面是一个空数组[],但是这会抛出一个错误

it('FeedFactory alerts array is filled', function() {
    var alerts = FeedFactory.returnAlerts();
    console.log('alerts',alerts);
    expect(alerts).to.equal([]);
});
这是我注释掉最后一个expectalerts.to.equal[]时的测试日志;线路

我工厂的代码

var alerts = [];

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

function returnAlerts() {
    return alerts;
}
因为[]!==[] && [] != []. JS对象之间并不松散或严格相等,因此expect[].to.equal[]将始终失败

您应该使用更深层次的相等形式,例如或其令人困惑的速记,或:

因为[]!==[] && [] != []. JS对象之间并不松散或严格相等,因此expect[].to.equal[]将始终失败

您应该使用更深层次的相等形式,例如或其令人困惑的速记,或:


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

汉斯:

var a = [];
var b = [];
console.log(a == b) //false
我将使用警报数组的长度来测试它是否为空数组。以书面形式:

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

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

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

汉斯:

var a = [];
var b = [];
console.log(a == b) //false
我将使用警报数组的长度来测试它是否为空数组。以书面形式:

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

为了检查数组的内容是否等于另一个数组的另一个内容,您必须使用深度检查,这会检查数组的每个值是否等于另一个数组中的值,费用非常昂贵。

谢谢!我发现这对expectalerts.to.eqlarray有效;9分钟@LeonGaban to.eql相当于.deep.eql,但我觉得很困惑。我会在答案中提到它。是的,.deep更明确,谢谢!我发现这对expectalerts.to.eqlarray有效;9分钟@LeonGaban to.eql相当于.deep.eql,但我觉得这很混乱。我会在答案中提到它。是的,.deep更明确