J'essaie de comparer deux objets pour voir s'ils sont identiques en utilisant hamcrest pour flex-unit, mais quand l'objet a des sous-objets, il lance juste une erreur:Quelle est la bonne façon de comparer les objets as3 en utilisant hamcrest
Error: Expected: (An array containing <[object Object]>
but: an array containing <[object Object]> was <[object Object]>
Je veux qu'il fasse un assertThat (..., hasProperties (...)); sur le sous-objet.
Existe-t-il un moyen d'obtenir cela ou devrais-je créer un matcher personnalisé?
EDIT
Un exemple de la structure d'objet je veux tester:
var expected:Object = {
number:1.3,
array:[{
prop1:"val1", prop2:"val2"
}]
anObject:{
propA:1, propB:2
},
}
var objectUnderTest:Object = {
number:1.3,
array:[{
prop1:"val1", prop2:"val2"
}]
anObject:{
propA:1, propB:2
},
}
assertThat("should be the same", objectUnderTest, hasProperties(expected));
depuis le prévu et objectUnderTest ont la même structure, le test doit passer, mais est de retour l'erreur: De plus, s'il existe un moyen de comparer deux chaînes JSON, cela fonctionnera également.
EDIT2
Ceci est ma version finale après Djib aide:
package com
{
public function assertEqualsObjects(message:String, object1:Object, object2:Object):Boolean
{
// we have to run it both ways (1-2, 2-1)
return (compare(object1, object2, message + ": object") && compare(object2, object1, message + ": extra"));
}
}
import org.flexunit.asserts.fail;
function compare(object1:Object, object2:Object, parent:String):Boolean
{
var count:int = 0;
for (var s:String in object1)
{
count ++;
if (!object2.hasOwnProperty(s))
{
fail(parent + "." + s + " expected: " + object1[s] + " but was: undefined");
return false;
}
if (!compare(object1[s], object2[s], parent + "." + s))
{
fail(parent + "." + s + " expected: " + object1[s] + " but was: " + object2[s]);
return false;
}
}
if (count == 0 && object1 != object2) // if object has no properties, compare their actual values
{
fail(parent + " expected: " + object1 + " but was: " + object2);
return false;
}
return true;
}
Vous avez donc un tableau avec des objets et vous voulez vérifier quoi exactement? Que les objets dans le tableau ont certaines propriétés? Ou qu'ils sont d'un type spécifique? Ou que ce sont des instances spécifiques? – Creynders
Ajout d'un exemple de code. J'espère que cela clarifier. – Marcotmp
Il ne me dit toujours pas ce que vous voulez tester exactement. Voulez-vous vérifier que l'objet testé possède ces propriétés avec ces valeurs exactes, ou voulez-vous vérifier qu'il possède simplement les propriétés 'anObject' et 'array'? Je veux dire, jusqu'à quel point la vérification doit-elle aller loin? – Creynders