Saltar al contenido

Pruebas de Jasmine JavaScript – toBe vs toEqual

Nuestro equipo especializado pasados varios días de investigación y recopilar de información, dimos con los datos necesarios, nuestro deseo es que te sea útil para tu plan.

Solución:

Para tipos primitivos (por ejemplo, números, booleanos, cadenas, etc.), no hay diferencia entre toBe y toEqual; cualquiera de los dos sirve para 5, trueo "the cake is a lie".

Para entender la diferencia entre toBe y toEqualimaginemos tres objetos.

var a =  bar: 'baz' ,
    b =  foo: a ,
    c =  foo: a ;

Usando una comparación estricta (===), algunas cosas son “lo mismo”:

> b.foo.bar === c.foo.bar
true

> b.foo.bar === a.bar
true

> c.foo === b.foo
true

Pero algunas cosas, aunque sean “iguales”, no son “lo mismo”, ya que representan objetos que viven en diferentes lugares de la memoria.

> b === c
false

de jazmín toBe Matcher no es más que un envoltorio para una comparación de igualdad estricta

expect(c.foo).toBe(b.foo)

es lo mismo que

expect(c.foo === b.foo).toBe(true)

No se limite a confiar en mi palabra; ver el código fuente de toBe.

Pero b y c representar objetos funcionalmente equivalentes; ambos se parecen

 foo:  bar: 'baz'  

¿No sería genial si pudiéramos decir que b y c son “iguales” incluso si no representan el mismo objeto?

Ingresar toEqualque comprueba la “igualdad profunda” (es decir, realiza una búsqueda recursiva a través de los objetos para determinar si los valores de sus keys son equivalentes). Pasarán las dos pruebas siguientes:

expect(b).not.toBe(c);
expect(b).toEqual(c);

Espero que ayude a aclarar algunas cosas.

toBe() versus toEqual(): toEqual() equivalencia de cheques. toBe()por otro lado, se asegura de que sean exactamente el mismo objeto.

yo diria usar toBe() al comparar valores, y toEqual() al comparar 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á false. Entonces, a menos que quiera asegurarse de que sea exactamente el mismo objeto en la memoria, use toEqual() para comparar objetos.

Consulte este enlace para obtener más información: http://evanhahn.com/how-do-i-jasmine/

Ahora, al mirar 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 es aquí.

Actualizar

Una manera fácil de mirar toBe() y toEqual() es entender qué hacen exactamente en JavaScript. Según Jasmine API, que se encuentra aquí:

toEqual() funciona para variables y literales simples, y debería funcionar para objetos

toBe() se compara con ===

Esencialmente lo que está diciendo es toEqual() y toBe() son javascripts similares === operador excepto toBe() también está comprobando para asegurarse de que es exactamente el mismo objeto, en el ejemplo a continuación objectOne === objectTwo //returns false así como. Sin embargo, toEqual() regresará true en esa situación.

Ahora, al menos puedes entender por qué cuando se 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 === En realidad, el operador significa que ambos operandos hacen referencia al mismo objeto o, en el caso de tipos de valor, tienen el mismo valor.

Para citar el proyecto jasmine github,

expect(x).toEqual(y); compara objetos o primitivas x e y y pasa si son equivalentes

expect(x).toBe(y); compara objetos o primitivas x e y y pasa
si son el mismo objeto

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *