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()буде порівнюватися за посиланням на об'єкт.