toBe()
versus toEqual()
: toEqual()
überprüft die Äquivalenz. toBe()
stellt hingegen sicher, dass es sich um dasselbe genaue Objekt handelt.
Ich würde sagen, benutze toBe()
beim Vergleich von Werten und toEqual()
beim Vergleich von Objekten.
Beim Vergleich von primitiven Typen werden toEqual()
und toBe()
das gleiche Ergebnis liefern. Beim Vergleich von Objekten ist toBe()
ein strengerer Vergleich, und wenn es nicht dasselbe Objekt im Speicher ist, wird dies false zurückgeben. Also, wenn du sicherstellen möchtest, dass es dasselbe Objekt im Speicher ist, benutze toEqual()
zum Vergleich von Objekten.
Schaue dir diesen Link für weitere Informationen an: http://evanhahn.com/how-do-i-jasmine/
Jetzt, wenn du den Unterschied zwischen toBe()
und toEqual()
bei Zahlen betrachtest, sollte es keinen Unterschied geben, solange dein Vergleich korrekt ist. 5
wird immer äquivalent zu 5
sein.
Ein schöner Ort, um damit herumzuspielen und verschiedene Ergebnisse zu sehen, ist hier
Update
Ein einfacher Weg, um toBe()
und toEqual()
zu verstehen, ist zu verstehen, was sie genau in JavaScript tun. Laut Jasmine API, die du hier findest:
toEqual() funktioniert für einfache Literale und Variablen und sollte für Objekte funktionieren
toBe() vergleicht mit ===
Im Grunde genommen bedeutet das, dass toEqual()
und toBe()
ähnlich dem JavaScript ===
Operator sind, außer dass toBe()
auch überprüft, ob es sich um dasselbe genaue Objekt handelt, wie zum Beispiel hier objectOne === objectTwo //gibt false zurück
. toEqual()
hingegen gibt in dieser Situation true zurück.
Jetzt verstehst du zumindest, warum bei folgendem Beispiel:
var objectOne = {
propertyOne: str,
propertyTwo: num
}
var objectTwo = {
propertyOne: str,
propertyTwo: num
}
expect(objectOne).toBe(objectTwo); //gibt false zurück
Dies liegt daran, dass, wie in dieser Antwort auf eine andere, aber ähnliche Frage erwähnt wird, der ===
Operator tatsächlich bedeutet, dass beide Operanden auf dasselbe Objekt verweisen oder im Fall von Werttypen den gleichen Wert haben.