我的测试,在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([]);
行时,这是测试日志。
我工厂的代码
var alerts = [];
var feedFactory = {
alerts : alerts,
getFeed : getFeed,
returnAlerts : returnAlerts,
saveFilters : saveFilters,
getFilters : getFilters
};
function returnAlerts() {
return alerts;
}
答案 0 :(得分:4)
因为[] !== [] && [] != []
。
您应该使用更深层次的平等,例如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);
为了检查数组的内容是否等于另一个数组的另一个内容,你必须使用深度检查,它检查数组的每个值是否等于另一个数组中的那个(非常昂贵)。