Проверяем ключи и значения объекта в Jest: mapModule

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам необходимо проверить идентичность объектов в Jest, воспользуйтесь матчером expect().toEqual(). Этот метод сравнивает ключи и значения объектов, подтверждая их идентичность.

JS
Скопировать код
expect({ name: 'Алиса', age: 30 }).toEqual({ name: 'Алиса', age: 30 });

Тест будет успешно пройден, только если объекты полностью совпадают.

Кроме того, Jest предлагает использовать toMatchObject для частичного сравнения и toStrictEqual для полного соответствия, включая проверку типов данных.

Кинга Идем в IT: пошаговый план для смены профессии

Детальное использование матчеров

Частичная проверка с помощью toMatchObject

Метод toMatchObject отлично подходит для проверки наличия определённых свойств у объекта:

JS
Скопировать код
// Для Jest нет значения, какая у Алисы работа, главное – имя и возраст совпадают.
expect({ name: 'Алиса', age: 30, job: 'Разработчик' }).toMatchObject({ name: 'Алиса', age: 30 });

Соответственно, проверяются только указанные свойства, остальные игнорируются.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Строгая проверка типов и значений с помощью toStrictEqual

toStrictEqual идеально подойдёт для случаев, когда необходимо учитывать в проверке не только значения, но и типы данных:

JS
Скопировать код
// toStrictEqual различит null и undefined без проблем.
expect({ name: 'Алиса', age: null }).not.toStrictEqual({ name: 'Алиса', age: undefined });

Этот метод умеет отличать null от undefined.

Проверка конкретного свойства с помощью toHaveProperty

Если вам необходимо проверить конкретное свойство и его значение, воспользуйтесь toHaveProperty:

JS
Скопировать код
// Проверяем, действительно ли возраст Алисы равен 30.
expect({ name: 'Алиса', age: 30 }).toHaveProperty('age', 30);

Подробности работы с существующими объектами и ключами

Обеспечение наличия непустых ключей или значений

Для подтверждения наличия у ключа значения, отличного от null и undefined, проверьте его на истинность:

JS
Скопировать код
// Приведение к Boolean покажет, есть ли значение у ключа.
expect(Boolean(object['key'])).toBe(true);

Учёт необязательных ключей с objectContaining

Используйте expect.objectContaining, если в анализируемом объекте могут быть необязательные ключи:

JS
Скопировать код
// Проверяйте наличие имени у Алисы лучше всего через объект.
expect({ name: 'Алиса', age: 30 }).toEqual(expect.objectContaining({ name: 'Алиса' }));

Этот метод практичен при работе с объектами, в которых некоторые ключи могут отсутствовать.

Разбираемся дальше: работа с вложенными и сложными объектами

Совпадение с вложенными объектами

Для проверки вложенных объектов применяйте рекурсивные матчеры toEqual и toMatchObject:

JS
Скопировать код
// Jest без проблем справляется с проверкой вложенных структур.
expect({ person: { name: 'Алиса', age: 30 } }).toEqual({ person: { name: 'Алиса', age: 30 } });

Проверка строковых шаблонов

Используйте expect.stringContaining и expect.stringMatching, если вы работаете со строковыми шаблонами:

JS
Скопировать код
// Найдет 'Привет' в приветствии.
expect({ message: 'Привет, мир!' }).toEqual({ message: expect.stringContaining('Привет') });

// Проверка соответствия URL регулярному выражению.
expect({ url: 'http://example.com' }).toEqual({ url: expect.stringMatching(/^http:/) });

Профессиональные советы: предохранители для надёжного тестирования

Защита от нечаянных утверждений

Выбирайте между toMatchObject и toStrictEqual в зависимости от требуемой строгости сравнения, чтобы избежать неожиданных результатов тестирования.

Комбинирование различных условий

Сочетая условия, можно проверить объект на наличие нескольких ключей сразу:

JS
Скопировать код
// Проверяем объект на наличие двух ключей одновременно.
expect(object).toHaveProperty('key1');
expect(object).toHaveProperty('key2');
// Или применяем оператор ИЛИ, когда достаточно наличия хотя бы одного ключа.
expect(object).toHaveProperty('key1') || expect(object).toHaveProperty('key2');

Визуализация

Представьте, что объекты — это пазлы:

Markdown
Скопировать код
Объект A (🧩): { 'key1': 'value1', 'key2': 'value2' }
Объект B (🧩): { 'key2': 'value2', 'key1': 'value1' }

Тестирование в Jest будет выглядеть так:

JS
Скопировать код
// Одной строкой проверяем, что структура и содержимое наших пазлов совпадают.
expect(objectA).toEqual(objectB);

И вы получаете полное совпадение. Расположение элементов (ключей и значений) не имеет значения для Jest, если структура и содержимое объектов идентичны.

Полезные материалы

  1. Expect · Jest — документация метода .toEqual() в Jest для сравнения значений.
  2. Using Matchers · Jest — подробная информация об использовании матчеров Jest для сравнения объектов.
  3. Сравнение равенства и самостоятельности – JavaScript | MDN — основные концепции равенства объектов в JavaScript.
  4. Lodash Documentation — метод _.isEqual() в библиотеке Lodash для глубокого сравнения объектов.
  5. Expect · Jest — описание .toMatchObject() для сравнения частичного соответствия объектов.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой матчеры в Jest следует использовать для полного сравнения объектов, учитывая типы данных?
1 / 5