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 имеют одинаковую структуру и значения
});