toBe()против toEqual(): toEqual()проверяет эквивалентность.toBe(), с другой стороны, удостоверяется, что это точно такой же объект.
Я бы сказал, использовать toBe()при сравнении значений, иtoEqual() при сравнении объектов.
При сравнении типов примитивов toEqual()и toBe()даст тот же результат. При сравнении объектов toBe()выполняется более строгое сравнение, и, если это не тот же самый объект в памяти, он возвращает false. Поэтому, если вы не хотите убедиться, что это точно такой же объект в памяти, используйте toEqual()для сравнения объектов.
Проверьте эту ссылку для получения дополнительной информации: http://evanhahn.com/how-do-i-jasmine/
Теперь, когда вы смотрите на разницу между числами toBe()и toEqual()когда дело доходит до цифр, не должно быть никакой разницы, если вы сравниваете их правильно. 5всегда будет эквивалентна 5.
Хорошее место, чтобы поиграть с этим, чтобы увидеть разные результаты здесь
Обновить
Простой способ взглянуть на это toBe()и toEqual()понять, что именно они делают в JavaScript. Согласно Jasmine API, найдены здесь :
toEqual () работает для простых литералов и переменных и должен работать для объектов
toBe () сравнивается с ===
По сути, это то, что говорит toEqual()и toBe()является похожим ===оператором Javascripts, за исключением toBe()того, что он также проверяет, чтобы убедиться, что это точно такой же объект, как и в примере ниже objectOne === objectTwo //returns false. Однако toEqual()вернется правда в этой ситуации.
Теперь вы можете, по крайней мере, понять, почему, когда дано:
var objectOne = {
propertyOne: str,
propertyTwo: num
}
var objectTwo = {
propertyOne: str,
propertyTwo: num
}
expect(objectOne).toBe(objectTwo); //returns false
Это происходит потому , что, как указано в этом ответе на другой, но подобный вопрос,=== оператор на самом деле означает , что оба операнд ссылается на тот же объект, или в случае типов значений, имеет одинаковое значение.
toEqual()будет сравнивать по ключу / значениям-контенту;toBe()будет сравнивать по ссылке на объект.