l'égalité de tableau de test chai ne fonctionne pas comme prévu

235

Pourquoi les éléments suivants échouent-ils?

expect([0,0]).to.equal([0,0]);

et quelle est la bonne façon de tester cela?

kannix
la source

Réponses:

360

Pour attendre , .equalcomparera les objets plutôt que leurs données, et dans votre cas, il s'agit de deux tableaux différents.

Utilisez .eqlpour comparer en profondeur les valeurs. Consultez ce lien .
Ou vous pouvez utiliser .deep.equalpour simuler la même chose que .eql.
Ou dans votre cas, vous voudrez peut-être vérifier .members .

Pour les assertions que vous pouvez utiliser .deepEqual, liez .

moka
la source
2
FTR, la syntaxe d'égalité profonde a changé en: .deepEqual()( chaijs.com/api/assert ).
Ludder
7
Elle n'est pas modifiée, vous recherchez la fonctionnalité Assertions , mais pas Attendre / Devrait quel sujet de démarrage était concerné.
moka
5
Tu as raison, je n'ai pas bien lu. Je pensais que c'était juste un autre changement d'API.
Ludder
6
to.deep.equal(['a','b'])ne semble pas fonctionner. cependant to.have.all.members(['a','b']). si lourd…
jacob
chaijs.com/plugins/deep-equal-in-any-order fonctionnait bien lorsque l'ordre des attributs d'objet était imprévisible.
asokan
60

Essayez d'utiliser Deep Equal. Il comparera les tableaux imbriqués ainsi que Json imbriqué.

expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });

Veuillez vous référer au site de documentation principal .

Rencontrez Mehta
la source
7
Cela fonctionne également pour les tableaux:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
alxndr
-1

Voici comment utiliser chai pour tester en profondeur les tableaux associatifs.

J'ai eu un problème en essayant d'affirmer que deux tableaux associatifs étaient égaux. Je sais que ceux-ci ne devraient pas vraiment être utilisés en javascript mais j'écrivais des tests unitaires autour du code hérité qui renvoie une référence à un tableau associatif. :-)

Je l'ai fait en définissant la variable comme un objet (pas un tableau) avant mon appel de fonction:

var myAssocArray = {};   // not []
var expectedAssocArray = {};  // not []

expectedAssocArray['myKey'] = 'something';
expectedAssocArray['differentKey'] = 'something else';

// legacy function which returns associate array reference
myFunction(myAssocArray);

assert.deepEqual(myAssocArray, expectedAssocArray,'compare two associative arrays');
GreensterRox
la source