toBe()
versus toEqual()
: toEqual()
verifica a equivalência. toBe()
, por outro lado, garante que eles sejam exatamente o mesmo objeto.
Eu diria que use toBe()
ao comparar valores e toEqual()
ao comparar objetos.
Ao comparar tipos primitivos, toEqual()
e toBe()
produzirá o mesmo resultado. Ao comparar objetos, toBe()
é uma comparação mais rigorosa e, se não for exatamente o mesmo objeto na memória, isso retornará falso. Portanto, a menos que você queira ter certeza de que é exatamente o mesmo objeto na memória, use-o toEqual()
para comparar objetos.
Confira este link para mais informações: http://evanhahn.com/how-do-i-jasmine/
Agora, ao analisar a diferença entre toBe()
e toEqual()
quando se trata de números, não deve haver nenhuma diferença, desde que sua comparação esteja correta. 5
sempre será equivalente a 5
.
Um bom lugar para brincar com isso e ver resultados diferentes é aqui
Atualizar
Uma maneira fácil de ver toBe()
e toEqual()
entender o que exatamente eles fazem em JavaScript. De acordo com a API do Jasmine, encontrada aqui :
toEqual () funciona para literais e variáveis simples e deve funcionar para objetos
toBe () se compara com ===
Essencialmente, o que isso está dizendo é toEqual()
e toBe()
é um ===
operador Javascripts semelhante , exceto que toBe()
também está verificando se o objeto é exatamente o mesmo, no exemplo abaixo objectOne === objectTwo //returns false
também. No entanto, toEqual()
retornará verdadeiro nessa situação.
Agora, você pode pelo menos entender o porquê quando determinado:
var objectOne = {
propertyOne: str,
propertyTwo: num
}
var objectTwo = {
propertyOne: str,
propertyTwo: num
}
expect(objectOne).toBe(objectTwo); //returns false
Isso ocorre porque, conforme declarado nesta resposta a uma pergunta diferente, mas semelhante, o ===
operador realmente significa que ambos os operandos referenciam o mesmo objeto ou, no caso de tipos de valor, têm o mesmo valor.
toEqual()
será comparado por conteúdo-chave / valores;toBe()
irá comparar por referência de objeto.