0
2つのオブジェクトを比較しようとしていますが、最初に同じキーがある場合はキー値が等しい場合でもassertEqualsのテストは失敗します。 2つのオブジェクトが配列内にあるので、実際にはオブジェクトの1つの配列とオブジェクトの別の配列を比較しているからです。また、私の実際のオブジェクトは関数から作られ、期待されるオブジェクトはリテラルです。assertEqualsのオブジェクト等価
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function decorateClassListWithAges(classList) {
return classList.reduce((arr, c) => {
arr.push({
'Name': c,
'Age': getRandomIntInclusive(10, 10) //Currently always 10 for test purposes
})
return arr
}, [])
}
function assertEquals(actual, expected, testName) {
if (actual == null || typeof actual != 'object')
return console.log('FAILED: expected ' + JSON.stringify(expected) + ' but got ' + JSON.stringify(actual));
if (Object.keys(actual).length !== Object.keys(expected).length)
return console.log('FAILED: expected ' + JSON.stringify(expected) + ' but got ' + JSON.stringify(actual));
for (let k in actual)
if (!expected.hasOwnProperty(k))
return console.log('FAILED: expected ' + JSON.stringify(expected) + ' but got ' + JSON.stringify(actual));
for (let k in expected) {
if (actual[k] !== expected[k])
return console.log('FAILED: expected ' + JSON.stringify(expected) + ' but got ' + JSON.stringify(actual));
}
return console.log('passed');
}
let a = ['James', 'Paul']
let e = [{'Name' : 'James', 'Age' : 10}, {'Name' : 'Paul', 'Age' : 10}]
assertEquals(decorateClassListWithAges(a), e)
良いアイデアだが、私は場合にのみ機能します文字列化を聞きましたオブジェクトのキーは同じ順序であり、この場合は同じですが、私はまだ文字列化に頼らない比較を知りたいです未来ありがとうございました – jhazelton1