Ich benutze Mocha und sollte als meine Test-Frameworks Knoten js Module. Bis jetzt funktioniert es OK, jetzt muss ich zwei Objekte gleich setzen. und ich habe einen Fehler erhalten (Test fehlgeschlagen), während das Objekt dasselbe ist (ich verwende webStorm 10) und das Diff-Fenster die beiden Objekte anzeigt und sie identisch sind (ich sehe auch die Meldung im Diff-Fenster Inhalt ist identisch ...)

Was kann es sein und es gibt einen Weg, dieses Problem zu überwinden?

Ich versuche mit beiden was fehlschlägt

should(inObjBefore).be.exactly({env: outObjAfter});

 inObjBefore.should.be.exactly({ env: outObjAfter});
1
user4445419 21 Aug. 2015 im 00:21

3 Antworten

Beste Antwort

Ich kann dies derzeit nicht testen, aber es könnte sein, dass should.be.exactly genau nach derselben Objektinstanz sucht, während Sie zwei Instanzen haben und daran interessiert sind, ob deren Eigenschaften gleich sind.

Das heißt,

A = object.with.name.is.Joe
B = otherObject.with.name.is.Joe
a.should.equal(b) = true
À.should.be.exactly(b) = false

Entschuldigung auf meinem Handy, kann dies nicht überprüfen.

0
bastijn 20 Aug. 2015 im 21:41

exactly führt einen genauen Vergleich unter Verwendung strenger Gleichheit durch, d. H. ===. In Javascript werden Objekte nach Referenz und nicht nach Wert gespeichert. Wenn Sie zwei Objekte vergleichen, sind sie sich daher nur dann gleich, wenn sie dieselbe Referenz haben:

var a = {
  x: 10
};

a === a // true
a === { x: 10 } // false

Entweder müssen Sie mit demselben Objekt vergleichen oder Sie können deepEqual verwenden.

1
danillouz 20 Aug. 2015 im 21:36

Sie müssen einen tiefen Objektvergleich verwenden. Verwenden Sie .eql oder .deepEqual (Alias für .eql). .exactly ist dasselbe wie .equal und führt einen Referenzvergleich mit === durch.

0
den bardadym 20 Aug. 2015 im 22:27