web-dev-qa-db-fra.com

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

Pourquoi ce qui suit échoue?

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

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

203
kannix

Pour expect, .equal comparera les objets plutôt que leurs données. Dans votre cas, il s'agit de deux tableaux différents.

Utilisez .eql afin de comparer en profondeur les valeurs. Découvrez ce lien .
Ou vous pouvez utiliser .deep.equal pour simuler la même chose que .eql.
Ou dans votre cas, vous voudrez peut-être cocher.members.

Pour asserts, vous pouvez utiliser .deepEqual, lien .

323
moka

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 principal de documentation .

55
Meet Mehta

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

J'ai eu un problème en essayant d'affirmer que deux associative tableaux é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 l'appel de ma 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');
0
GreensterRox

De plus, to.eql évitera les erreurs d'égalité profonde provoquées par to.eq lorsque les données sont exactement les mêmes, par exemple l'assertion comme ceci:

AssertionError: expected { Object (_thing, id) } to equal { Object (_thing, id) }

0
Tanja Stroble