Die Chai-Test-Array-Gleichheit funktioniert nicht wie erwartet

234

Warum schlägt folgendes fehl?

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

und wie kann man das richtig testen?

kannix
quelle

Antworten:

360

Für erwarten , .equalwerden Objekte vergleichen , anstatt ihre Daten, und in Ihrem Fall ist es zwei verschiedene Arrays.

Verwenden Sie .eqldiese Option, um Werte gründlich zu vergleichen. Schauen Sie sich diesen Link an .
Oder Sie könnten verwenden .deep.equal, um das gleiche zu simulieren wie .eql.
Oder in Ihrem Fall möchten Sie vielleicht überprüfen .members .

Für Asserts, die Sie verwenden können .deepEqual, verlinken Sie .

Moka
quelle
2
FTR, die Deep Equal-Syntax wurde geändert in: .deepEqual()( chaijs.com/api/assert ).
Ludder
7
Es wird nicht geändert, Sie sehen sich die Asserts- Funktionalität an, aber nicht Erwarten / Sollte, um welchen Themenstarter es sich handelt.
Moka
5
Du hast recht, ich habe nicht gut gelesen. Ich dachte, es ist nur eine weitere API-Änderung.
Ludder
6
to.deep.equal(['a','b'])scheint nicht zu funktionieren. to.have.all.members(['a','b'])tut es jedoch. so umständlich ...
Jacob
chaijs.com/plugins/deep-equal-in-any-order funktionierte gut, wenn die Reihenfolge der Objektattribute nicht vorhersehbar war.
Asokan
59

Versuchen Sie, Deep Equal zu verwenden. Es werden sowohl verschachtelte Arrays als auch verschachtelte Json verglichen.

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

Bitte beziehen Sie sich auf die Hauptdokumentationsseite .

Treffen Sie Mehta
quelle
6
Dies funktioniert auch für Arrays:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
Alxndr
-1

So verwenden Sie Chai, um assoziative Arrays gründlich zu testen.

Ich hatte ein Problem beim Versuch zu behaupten, dass zwei assoziative Arrays gleich waren. Ich weiß, dass diese nicht wirklich in Javascript verwendet werden sollten, aber ich habe Unit-Tests um Legacy-Code geschrieben, der einen Verweis auf ein assoziatives Array zurückgibt. :-)

Ich habe die Variable vor meinem Funktionsaufruf als Objekt (nicht als Array) definiert:

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
quelle