为什么这个测试失败了?数组应等于 []
Why is this test failing? Array should equal []
我的测试,alerts
变量下面是一个空数组 []
但是这会引发错误。
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;
}
因为[] !== [] && [] != []
。 JS 对象不是松散或严格相等的,所以 expect([]).to.equal([])
总是会失败。
你应该使用更深层次的相等形式,例如deep (or its confusing shorthand, eql) or members:
expect([1, 2, 3]).to.deep.equal([1, 2, 3])
expect([1, 2, 3]).to.include.members([1, 2])
两个空数组彼此不相等,因为每个数组都有不同的引用,因为所有对象(以及与此相关的数组)都被引用而不是被复制。 检查对象是否相等是检查引用而不是内部内容
机会:
var a = [];
var b = [];
console.log(a == b) //false
我会使用警报数组的长度来测试它是否为空数组。通过写作:
expect(alerts.length).to.equal(0);
为了检查数组的内容是否等于另一个数组的另一个内容,您必须使用深度检查,检查数组的每个值是否等于另一个数组中的值(非常昂贵)。
我的测试,alerts
变量下面是一个空数组 []
但是这会引发错误。
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;
}
因为[] !== [] && [] != []
。 JS 对象不是松散或严格相等的,所以 expect([]).to.equal([])
总是会失败。
你应该使用更深层次的相等形式,例如deep (or its confusing shorthand, eql) or members:
expect([1, 2, 3]).to.deep.equal([1, 2, 3])
expect([1, 2, 3]).to.include.members([1, 2])
两个空数组彼此不相等,因为每个数组都有不同的引用,因为所有对象(以及与此相关的数组)都被引用而不是被复制。 检查对象是否相等是检查引用而不是内部内容
机会:
var a = [];
var b = [];
console.log(a == b) //false
我会使用警报数组的长度来测试它是否为空数组。通过写作:
expect(alerts.length).to.equal(0);
为了检查数组的内容是否等于另一个数组的另一个内容,您必须使用深度检查,检查数组的每个值是否等于另一个数组中的值(非常昂贵)。