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?

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 .


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 .


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');
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.