toBe()
проти toEqual()
: toEqual()
перевіряє еквівалентність. toBe()
з іншого боку, гарантує, що вони точно такий самий об’єкт.
Я б сказав, використовуйте toBe()
при порівнянні значень і toEqual()
при порівнянні об'єктів.
Якщо порівнювати примітивні типи, toEqual()
і toBe()
це дасть той же результат. Якщо порівнювати об'єкти, toBe()
це суворіше порівняння, і якщо це не той самий об’єкт у пам'яті, це повернеться помилковим. Тому, якщо ви не хочете переконатися, що це абсолютно той самий об’єкт у пам'яті, використовуйте toEqual()
для порівняння об'єктів.
Перегляньте це посилання, щоб отримати докладнішу інформацію: http://evanhahn.com/how-do-i-jasmine/
Тепер, коли дивимось на різницю між toBe()
чи toEqual()
коли мова йде про числа, не повинно бути різниці, якщо ваше порівняння є правильним. 5
завжди буде рівнозначним 5
.
Приємне місце, щоб пограти з цим, щоб побачити різні результати, є тут
Оновлення
Простий спосіб подивитися toBe()
і toEqual()
зрозуміти, що саме вони роблять в JavaScript. За даними 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()
буде порівнюватися за посиланням на об'єкт.