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. 5sarà 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.