Jasmine hat integrierte Matcher toBe
und toEqual
. Wenn ich ein Objekt wie diese:Überprüfung der Objektgleichheit in Jasmine
function Money(amount, currency){
this.amount = amount;
this.currency = currency;
this.sum = function (money){
return new Money(200, "USD");
}
}
und versuche new Money(200, "USD")
und das Ergebnis der Summe zu vergleichen, dieser Einbau-Matcher wird nicht wie erwartet funktionieren. Ich habe es geschafft, ein Work-Around basierend auf einem benutzerdefinierten equals
method und benutzerdefinierten Matcher zu implementieren, aber es scheint nur zu viel Arbeit.
Was ist der Standard Weg, um Objekte in Jasmine zu vergleichen?
Was Sie über '==' und '===' gesagt haben, ist völlig falsch. Zwei verschiedene Instanzen eines Objekts mit demselben Inhalt geben beide Falsch zurück. Für alle Nicht-Primitiven verhalten sich '==' und '===' identisch. http://jsfiddle.net/9mrmyrs6/ –
@JuanMendes überprüfen Sie die Antwort von Andreas K. ... Sie sagen zwei verschiedene Dinge. Ist das ein Unterschied, wenn Sie ein Objekt gegen ein Objektliteral neu erstellen? – pherris
@pherris mmm ... ja, wir sagen verschiedene Dinge: Ich sage, dass es beim Vergleich von Nicht-Primitiven egal ist, ob Sie '==' oder '===' verwenden, es gibt keinen Zwang . Andreas sagt, dass Sie einen benutzerdefinierten Matcher erstellen können. Die letzte Aussage, wie man dieses Problem beheben kann, ist "korrekt", aber die Erklärung im ersten Absatz ist nur falsch. 'Jasmine' überprüft tatsächlich den Inhalt des Objekts, wenn Sie' toBe() 'anstelle von' equals' verwenden. –