Pourquoi ce qui suit échoue?
expect([0,0]).to.equal([0,0]);
et quelle est la bonne façon de tester cela?
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 .
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 .
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');
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) }