toBe()
versus toEqual()
: toEqual()
verifica la equivalencia. toBe()
, por otro lado, se asegura de que sean exactamente el mismo objeto.
Yo diría usar toBe()
cuando se comparan valores y toEqual()
cuando se comparan objetos.
Al comparar tipos primitivos, toEqual()
y toBe()
dará el mismo resultado. Al comparar objetos, toBe()
es una comparación más estricta, y si no es exactamente el mismo objeto en la memoria, esto devolverá falso. Entonces, a menos que desee asegurarse de que sea exactamente el mismo objeto en la memoria, utilícelo toEqual()
para comparar objetos.
Consulte este enlace para obtener más información: http://evanhahn.com/how-do-i-jasmine/
Ahora, al observar la diferencia entre toBe()
y toEqual()
cuando se trata de números, no debería haber ninguna diferencia siempre que su comparación sea correcta. 5
siempre será equivalente a 5
.
Un buen lugar para jugar con esto para ver diferentes resultados está aquí
Actualizar
Una manera fácil de ver toBe()
y toEqual()
entender es qué hacen exactamente en JavaScript. Según la API de Jasmine, que se encuentra aquí :
toEqual () funciona para literales y variables simples, y debería funcionar para objetos
toBe () se compara con ===
Esencialmente, lo que está diciendo es toEqual()
y toBe()
es un ===
operador Javascripts similar , excepto toBe()
que también se está verificando para asegurarse de que sea exactamente el mismo objeto, en eso también para el ejemplo a continuación objectOne === objectTwo //returns false
. Sin embargo, toEqual()
volverá cierto en esa situación.
Ahora, al menos puede entender por qué cuando se le da:
var objectOne = {
propertyOne: str,
propertyTwo: num
}
var objectTwo = {
propertyOne: str,
propertyTwo: num
}
expect(objectOne).toBe(objectTwo); //returns false
Esto se debe a que, como se indica en esta respuesta a una pregunta diferente pero similar, el ===
operador en realidad significa que ambos operandos hacen referencia al mismo objeto, o en el caso de tipos de valor, tienen el mismo valor.
toEqual()
se comparará por clave / valores-contenido;toBe()
se comparará por referencia de objeto.