toBe()
versus toEqual()
: toEqual()
vérifie l'équivalence. toBe()
, d'autre part, s'assure qu'ils sont exactement le même objet.
Je dirais utiliser toBe()
lors de la comparaison de valeurs et toEqual()
lors de la comparaison d'objets.
Lors de la comparaison des types primitifs, toEqual()
et toBe()
donnera le même résultat. Lorsque vous comparez des objets, toBe()
c'est une comparaison plus stricte, et si ce n'est pas exactement le même objet en mémoire, cela retournera faux. Donc, sauf si vous voulez vous assurer qu'il s'agit exactement du même objet en mémoire, utilisez-le toEqual()
pour comparer les objets.
Consultez ce lien pour plus d'informations: http://evanhahn.com/how-do-i-jasmine/
Maintenant, quand on regarde la différence entre toBe()
et toEqual()
quand il s'agit de chiffres, il ne devrait pas y avoir de différence tant que votre comparaison est correcte. 5
sera toujours équivalent à 5
.
Un bon endroit pour jouer avec cela pour voir différents résultats est ici
Mise à jour
Un moyen facile de regarder toBe()
et toEqual()
de comprendre ce qu'ils font exactement en JavaScript. Selon l'API Jasmine, trouvée ici :
toEqual () fonctionne pour les littéraux et variables simples, et devrait fonctionner pour les objets
toBe () se compare à ===
Essentiellement, ce que cela signifie est toEqual()
et toBe()
sont des ===
opérateurs Javascripts similaires , sauf qu'il toBe()
vérifie également pour s'assurer qu'il s'agit exactement du même objet, dans celui de l'exemple ci-dessous objectOne === objectTwo //returns false
également. Cependant, toEqual()
reviendra vrai dans cette situation.
Maintenant, vous pouvez au moins comprendre pourquoi une fois donné:
var objectOne = {
propertyOne: str,
propertyTwo: num
}
var objectTwo = {
propertyOne: str,
propertyTwo: num
}
expect(objectOne).toBe(objectTwo); //returns false
En effet, comme indiqué dans cette réponse à une question différente mais similaire, l' ===
opérateur signifie en fait que les deux opérandes font référence au même objet ou, dans le cas de types de valeur, ont la même valeur.
toEqual()
comparera par clé / contenu de valeurs;toBe()
comparera par référence d'objet.