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. 5sempre 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 falsetambé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.