【发布时间】:2018-01-07 13:53:59
【问题描述】:
我目前正在使用 Mocha 运行测试,以检查对象、数组和数组内对象的相等性。尽管在我的测试的“对象”部分中,我的最后一个测试目前失败了,但我传入了两个相似的对象并且它们通过了。
const compareObjects = function(a, b){
for(var prop in a){
if(a[prop] === b[prop] !== true){
return false;
}
}
return true;
}
const compareArrays = function(a, b){
if(a.length !== b.length){
return false;
}
for(var i = 0; i < a.length; i++){
//checking for objects inside of arrays here
if(typeof a[i] === 'object' && typeof b[i] === 'object'){
if(compareObjects(a[i], b[i]) !== true){
return false;
}
} else if (a[i] !== b[i]){
return false;
}
}
return true;
}
这失败了 -
describe('Arrays', function() {
it('should return false when comparing two objects inside of
arrays with different number of keys', function() {
var arr1 = [
{
name: 'Janet',
age: 25,
}
]
var arr2 = [
{
name: 'Janet',
age: 25,
hairColor: 'brown'
}
]
assert.equal(false, compareArrays(arr1, arr2));
});
});
这通过了 -
describe('Objects', function() {
it('should return false when there is a different number of
keys', function() {
var obj1 = {name: 'Janet', age: 25, hair: 'brown'}
var obj2 = {name: 'Janet', age: 25}
assert.equal(false, compareObjects(obj1, obj2));
});
});
【问题讨论】:
-
(a[i] !== b[i])将始终通过,因为操作数不是指同一个对象。 -
CompareObjects 仅遍历 A 中的属性并检查 B 中是否存在相同的属性。您还应该将
Object.keys(a).length与Object.keys(b).length进行比较
标签: javascript arrays object mocha.js equality