Проверяем ключи и значения объекта в Jest: mapModule
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Если вам необходимо проверить идентичность объектов в Jest, воспользуйтесь матчером expect().toEqual()
. Этот метод сравнивает ключи и значения объектов, подтверждая их идентичность.
expect({ name: 'Алиса', age: 30 }).toEqual({ name: 'Алиса', age: 30 });
Тест будет успешно пройден, только если объекты полностью совпадают.
Кроме того, Jest предлагает использовать toMatchObject
для частичного сравнения и toStrictEqual
для полного соответствия, включая проверку типов данных.
Детальное использование матчеров
Частичная проверка с помощью toMatchObject
Метод toMatchObject
отлично подходит для проверки наличия определённых свойств у объекта:
// Для Jest нет значения, какая у Алисы работа, главное – имя и возраст совпадают.
expect({ name: 'Алиса', age: 30, job: 'Разработчик' }).toMatchObject({ name: 'Алиса', age: 30 });
Соответственно, проверяются только указанные свойства, остальные игнорируются.
Строгая проверка типов и значений с помощью toStrictEqual
toStrictEqual
идеально подойдёт для случаев, когда необходимо учитывать в проверке не только значения, но и типы данных:
// toStrictEqual различит null и undefined без проблем.
expect({ name: 'Алиса', age: null }).not.toStrictEqual({ name: 'Алиса', age: undefined });
Этот метод умеет отличать null
от undefined
.
Проверка конкретного свойства с помощью toHaveProperty
Если вам необходимо проверить конкретное свойство и его значение, воспользуйтесь toHaveProperty
:
// Проверяем, действительно ли возраст Алисы равен 30.
expect({ name: 'Алиса', age: 30 }).toHaveProperty('age', 30);
Подробности работы с существующими объектами и ключами
Обеспечение наличия непустых ключей или значений
Для подтверждения наличия у ключа значения, отличного от null
и undefined
, проверьте его на истинность:
// Приведение к Boolean покажет, есть ли значение у ключа.
expect(Boolean(object['key'])).toBe(true);
Учёт необязательных ключей с objectContaining
Используйте expect.objectContaining
, если в анализируемом объекте могут быть необязательные ключи:
// Проверяйте наличие имени у Алисы лучше всего через объект.
expect({ name: 'Алиса', age: 30 }).toEqual(expect.objectContaining({ name: 'Алиса' }));
Этот метод практичен при работе с объектами, в которых некоторые ключи могут отсутствовать.
Разбираемся дальше: работа с вложенными и сложными объектами
Совпадение с вложенными объектами
Для проверки вложенных объектов применяйте рекурсивные матчеры toEqual
и toMatchObject
:
// Jest без проблем справляется с проверкой вложенных структур.
expect({ person: { name: 'Алиса', age: 30 } }).toEqual({ person: { name: 'Алиса', age: 30 } });
Проверка строковых шаблонов
Используйте expect.stringContaining
и expect.stringMatching
, если вы работаете со строковыми шаблонами:
// Найдет 'Привет' в приветствии.
expect({ message: 'Привет, мир!' }).toEqual({ message: expect.stringContaining('Привет') });
// Проверка соответствия URL регулярному выражению.
expect({ url: 'http://example.com' }).toEqual({ url: expect.stringMatching(/^http:/) });
Профессиональные советы: предохранители для надёжного тестирования
Защита от нечаянных утверждений
Выбирайте между toMatchObject
и toStrictEqual
в зависимости от требуемой строгости сравнения, чтобы избежать неожиданных результатов тестирования.
Комбинирование различных условий
Сочетая условия, можно проверить объект на наличие нескольких ключей сразу:
// Проверяем объект на наличие двух ключей одновременно.
expect(object).toHaveProperty('key1');
expect(object).toHaveProperty('key2');
// Или применяем оператор ИЛИ, когда достаточно наличия хотя бы одного ключа.
expect(object).toHaveProperty('key1') || expect(object).toHaveProperty('key2');
Визуализация
Представьте, что объекты — это пазлы:
Объект A (🧩): { 'key1': 'value1', 'key2': 'value2' }
Объект B (🧩): { 'key2': 'value2', 'key1': 'value1' }
Тестирование в Jest будет выглядеть так:
// Одной строкой проверяем, что структура и содержимое наших пазлов совпадают.
expect(objectA).toEqual(objectB);
И вы получаете полное совпадение. Расположение элементов (ключей и значений) не имеет значения для Jest, если структура и содержимое объектов идентичны.
Полезные материалы
- Expect · Jest — документация метода
.toEqual()
в Jest для сравнения значений. - Using Matchers · Jest — подробная информация об использовании матчеров Jest для сравнения объектов.
- Сравнение равенства и самостоятельности – JavaScript | MDN — основные концепции равенства объектов в JavaScript.
- Lodash Documentation — метод
_.isEqual()
в библиотеке Lodash для глубокого сравнения объектов. - Expect · Jest — описание
.toMatchObject()
для сравнения частичного соответствия объектов.