Ручные моки с ECMAScript Jest

Вопрос или проблема

Ручные моки с ECMAScript Jest.

Ответ или решение

Для работы с ручными моками в Jest с использованием ECMAScript, необходимо следовать определённой процедуре. Jest предоставляет мощный механизм для создания моков, позволяющий эффективно тестировать ваши модули.

Шаг 1: Создание структуры проекта

Сначала убедитесь, что у вас есть проект с установленным Jest. Если вы еще не установили Jest, вы можете сделать это с помощью npm:

npm install --save-dev jest

Шаг 2: Создание мока

Для создания ручного мока вам нужно создать папку __mocks__ в той же директории, что и ваш модуль. Назовем модуль, который мы собираемся мокировать, module.js.

Структура проекта:

/project
  ├── __mocks__
  │   └── module.js
  ├── module.js
  ├── test.js
  └── package.json

Пример мока

Допустим, у вас есть следующий модуль (module.js):

export const fetchData = async () => {
  // Имитация получения данных с API
  return await fetch('https://api.example.com/data').then(response => response.json());
};

Вы можете создать моку (__mocks__/module.js) следующим образом:

export const fetchData = jest.fn().mockResolvedValue({ data: 'mocked data' });

Здесь мы используем jest.fn() для создания мока функции fetchData, которая возвращает промис с заданным значением.

Шаг 3: Настройка теста

Теперь давайте напишем тест для нашего модуля, который использует мок. Создадим файл test.js:

import { fetchData } from './module';

jest.mock('./module'); // Это подключает наш мок

test('fetchData возвращает замокированные данные', async () => {
  const data = await fetchData();
  expect(data).toEqual({ data: 'mocked data' });
  expect(fetchData).toHaveBeenCalled(); // Проверяем, что функция была вызвана
});

Шаг 4: Запуск тестов

Теперь вы можете запустить тесты в вашем проекте с помощью команды:

npm test

Важные замечания

  1. Изоляция тестов: Каждый тест будет использовать свежую версию вашего мока благодаря тому, что Jest сбрасывает состояние моков после каждого теста, чтобы не было пересечений.

  2. Обращение к оригинальному коду: Если вам нужно использовать оригинальную реализацию функции в определённых тестах, вы можете сделать это, вызвав jest.requireActual:

const actualFetchData = jest.requireActual('./module').fetchData;

// Используйте actualFetchData вместо моковой функции
  1. Параметры: Вы можете настроить возвращаемые значения мока с помощью mockImplementation или настроить его на возврат значений в зависимости от входных параметров.

Заключение

Использование ручных моков в Jest позволяет вам более гибко тестировать ваши модули, контролировать поведение зависимостей и создавать предсказуемые тестовые сценарии. Этот подход значительно упрощает процесс отладки и обеспечивает высокое качество кода.

Оцените материал
Добавить комментарий

Капча загружается...