toBe и toEqual — это матчеры, используемые для сравнения значений. Основное различие между ними заключается в способе сравнения:

  • toBe использует Object.is для проверки строгого равенства. Если вы проверяете объект или массив с помощью toBe, он пройдет только в том случае, если вы сравниваете точно ту же самую инстанцию объекта или массива. Это идеально подходит для проверки примитивных типов, таких как числа, строки и булевы значения, где важно строгое равенство.
  • toEqual проверяет на глубокое равенство. Он рекурсивно проверяет каждое поле объекта или массива. Это означает, что если два объекта имеют одинаковую структуру и вложенные значения, даже если они не являются одной и той же инстанцией, toEqual пройдет. Это полезно, когда вы хотите проверить значение объекта, но не важно, является ли это новым экземпляром или нет.

Примеры:

test('toBe vs toEqual', () => {
  const obj1 = { a: 1, b: 2 };
  const obj2 = { a: 1, b: 2 };
  const obj3 = obj1;
 
  expect(1).toBe(1); // Пройдет, так как 1 строго равно 1
  expect(obj1).not.toBe(obj2); // Пройдет, так как obj1 и obj2 — разные инстанции
  expect(obj1).toBe(obj3); // Пройдет, так как obj1 и obj3 — одна и та же инстанция
 
  expect(obj1).toEqual(obj2); // Пройдет, так как obj1 и obj2 имеют одинаковую структуру и значения
});

Назад