toBe()
versus toEqual()
: toEqual()
prüft die Äquivalenz. toBe()
stellt andererseits sicher, dass es sich um genau dasselbe Objekt handelt.
Ich würde sagen, verwenden Sie toBe()
beim Vergleichen von Werten und toEqual()
beim Vergleichen von Objekten.
Beim Vergleich von primitiven Typen, toEqual()
und toBe()
das gleiche Ergebnis ergibt. Beim Vergleichen von Objekten toBe()
handelt es sich um einen strengeren Vergleich. Wenn es sich nicht um genau dasselbe Objekt im Speicher handelt, wird false zurückgegeben. Wenn Sie also nicht sicherstellen möchten, dass es sich um genau dasselbe Objekt im Speicher handelt, verwenden Sie es toEqual()
zum Vergleichen von Objekten.
Weitere Informationen finden Sie unter diesem Link: http://evanhahn.com/how-do-i-jasmine/
Wenn Sie nun den Unterschied zwischen toBe()
und toEqual()
in Bezug auf Zahlen betrachten, sollte es keinen Unterschied geben, solange Ihr Vergleich korrekt ist. 5
wird immer gleich sein 5
.
Ein schöner Ort, um damit herumzuspielen und verschiedene Ergebnisse zu sehen, ist hier
Aktualisieren
Eine einfache Möglichkeit zu betrachten toBe()
und toEqual()
zu verstehen ist, was genau sie in JavaScript tun. Laut Jasmine API hier zu finden :
toEqual () funktioniert für einfache Literale und Variablen und sollte für Objekte funktionieren
toBe () vergleicht mit ===
Im Wesentlichen , was das sagt , ist , toEqual()
und toBe()
sind ähnlich Javascripts ===
Betreiber außer toBe()
auch sicherstellen, ist die Überprüfung ist es genau das gleiche Objekt, dass für das Beispiel unten objectOne === objectTwo //returns false
als auch. In toEqual()
dieser Situation wird jedoch true zurückgegeben.
Jetzt können Sie zumindest verstehen, warum, wenn gegeben:
var objectOne = {
propertyOne: str,
propertyTwo: num
}
var objectTwo = {
propertyOne: str,
propertyTwo: num
}
expect(objectOne).toBe(objectTwo); //returns false
Dies liegt daran, ===
dass der Operator , wie in dieser Antwort auf eine andere, aber ähnliche Frage angegeben, tatsächlich bedeutet, dass beide Operanden auf dasselbe Objekt verweisen oder bei Werttypen denselben Wert haben.
toEqual()
wird nach Schlüssel / Wert-Inhalt verglichen;toBe()
wird anhand der Objektreferenz verglichen.