J'essaie de comparer 2 objets, d'abord s'ils ont les mêmes clés, puis si leurs valeurs de clé sont égales, alors les tests de assertEquals échouent toujours. Je pense que c'est parce que les deux objets sont à l'intérieur d'un tableau, donc c'est en train de comparer un tableau d'objets par rapport à un autre tableau d'objets. De plus, mon objet réel est créé à partir d'une fonction alors que l'objet attendu est un littéral.Egalité d'objet dans 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)
C'est une bonne idée, mais j'ai entendu fonctionne stringify que si les clés d'objet sont dans le même ordre, dans ce cas elles le sont, mais j'aimerais quand même savoir une comparaison qui ne reposait pas sur l'avenir Je vous remercie – jhazelton1