Warum schlägt das folgende fehl?Chai Test Array-Gleichheit funktioniert nicht wie erwartet
expect([0,0]).to.equal([0,0]);
und was ist der richtige Weg, um das zu testen?
Warum schlägt das folgende fehl?Chai Test Array-Gleichheit funktioniert nicht wie erwartet
expect([0,0]).to.equal([0,0]);
und was ist der richtige Weg, um das zu testen?
Für erwarten, .equal
wird Objekte vergleichen, anstatt ihre Daten, und in Ihrem Fall ist es zwei verschiedene Arrays.
Verwenden Sie .eql
, um Werte tief zu vergleichen. Überprüfen Sie diese link.
Oder Sie könnten .deep.equal
verwenden, um das gleiche wie .eql
zu simulieren.
Oder in Ihrem Fall möchten Sie vielleicht check.members
.
Für bestätigt können Sie .deepEqual
, link verwenden.
FTR, die tiefe Gleichsyntax hat sich geändert in: '.deepEqual()' (http://chaijs.com/api/assert). – Ludder
Es ist nicht geändert, Sie sehen ** bestätigt ** Funktionalität, aber nicht ** erwarten/sollte ** was Thema Starter besorgt war. – moka
Sie haben Recht, ich habe nicht gut gelesen. Ich dachte, es ist nur eine weitere API-Änderung. – Ludder
Versuchen Sie tiefe Equal zu verwenden. Es wird verschachtelte Arrays sowie verschachtelte Json vergleichen.
expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });
Bitte beziehen Sie sich auf main documentation site.
Das funktioniert auch für Arrays: 'expect ([1, 5, 10] .sort()). to.deep.equal ([1, 10, 5])' – alxndr
So verwenden Sie chai, um assoziative Arrays zu testen.
Ich hatte ein Problem versucht zu behaupten, dass zwei assoziative Arrays waren gleich. Ich weiß, dass diese nicht wirklich in Javascript verwendet werden sollten, aber ich schrieb Komponententests um Legacy-Code, der einen Verweis auf ein assoziatives Array zurückgibt. :-)
Ich habe es durch die Variable als ein Objekt (nicht Array), die vor meinem Funktionsaufruf:
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');
Sorry, aber das ist ein gutes Beispiel für den Grund, warum ich diese „fließend Sprache hasse "APIs. Es ist nicht Englisch: Es ist eine Art von einer abgeschlagenen Version von Semi-Englisch. Warum also so tun, als ob es Englisch ist? Für Nicht-Programmierer? Dann würde ich erwarten, dass es klarer und offensichtlicher ist, nicht weniger. "Es ist einfach, Sie verwenden 'gleich', um die Gleichheit zu testen ... oh, nicht für Arrays, weil es einen Objektvergleich durchführt ... nun, Arrays sind wie ein spezialisierter Objekttyp ... wissen Sie, verwenden Sie einfach eql für Arrays und mach dir keine Sorgen, warum. " Groß! – fool4jesus