toBe()
contro toEqual()
: toEqual()
controlla l'equivalenza. toBe()
, d'altra parte, si assicura che siano esattamente lo stesso oggetto.
Direi uso toBe()
quando si confrontano i valori e toEqual()
quando si confrontano gli oggetti.
Quando si confrontano i tipi primitivi toEqual()
e si toBe()
otterrà lo stesso risultato. Quando si confrontano oggetti, toBe()
è un confronto più rigoroso e se non è lo stesso oggetto in memoria, questo restituirà false. Quindi, a meno che non si voglia assicurarsi che sia esattamente lo stesso oggetto in memoria, utilizzare toEqual()
per confrontare gli oggetti.
Dai un'occhiata a questo link per maggiori informazioni: http://evanhahn.com/how-do-i-jasmine/
Ora, quando si guarda la differenza tra toBe()
e toEqual()
quando si tratta di numeri, non ci dovrebbero essere differenze finché il confronto è corretto. 5
sarà sempre equivalente a 5
.
Un bel posto per giocare con questo per vedere diversi risultati è qui
Aggiornare
Un modo semplice per vedere toBe()
ed toEqual()
è capire cosa fanno esattamente in JavaScript. Secondo l'API Jasmine, si trova qui :
toEqual () funziona per semplici letterali e variabili e dovrebbe funzionare per gli oggetti
toBe () si confronta con ===
In sostanza, ciò che sta dicendo è toEqual()
e toBe()
sono ===
operatori Javascripts simili , tranne che toBe()
sta anche verificando che si tratti esattamente dello stesso oggetto, anche in questo esempio objectOne === objectTwo //returns false
. Tuttavia, toEqual()
tornerà vero in quella situazione.
Ora, almeno puoi capire perché quando ti viene dato:
var objectOne = {
propertyOne: str,
propertyTwo: num
}
var objectTwo = {
propertyOne: str,
propertyTwo: num
}
expect(objectOne).toBe(objectTwo); //returns false
Questo perché, come indicato in questa risposta a una domanda diversa, ma simile, l' ===
operatore in realtà significa che entrambi gli operandi fanno riferimento allo stesso oggetto o, nel caso di tipi di valore, hanno lo stesso valore.
toEqual()
verrà confrontato per contenuto chiave / valori;toBe()
confronta per riferimento oggetto.