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()
будет сравнивать по ссылке на объект.