Файл jest.config.js

Файл jest.config.js является важным элементом настройки тестовой среды в проекте с использованием Jest. Этот файл служит для конфигурации поведения Jest, позволяя разработчику гибко настроить тестирование. Важность правильной настройки заключается в том, что она позволяет оптимизировать тестирование, улучшить производительность и повысить точность выполнения тестов.

1. verbose

Параметр verbose управляет выводом информации в консоль при выполнении тестов. Если установлено значение true, Jest будет выводить подробную информацию о каждом тесте, включая его название и результат. Это полезно для отслеживания каждого теста, когда нужно получить детализированный вывод, особенно в больших проектах.

module.exports = {
  verbose: true,
};

2. preset

Поле preset позволяет указать предустановленную конфигурацию, которая может быть полезна для быстрой настройки Jest под конкретную среду. Например, для использования с React проектами часто используется react, для работы с TypeScript — ts-jest. Это значительно упрощает конфигурацию и устраняет необходимость в детальной настройке каждого параметра.

module.exports = {
  preset: 'ts-jest',
};

3. testEnvironment

Этот параметр указывает, в какой среде будут выполняться тесты. По умолчанию Jest использует среду jsdom, которая имитирует браузер. Однако для Node.js приложений можно установить node, чтобы тесты выполнялись в окружении сервера.

module.exports = {
  testEnvironment: 'node',
};

4. roots

Параметр roots указывает Jest, где искать тесты. По умолчанию Jest ищет тестовые файлы в папках __tests__ и в любых файлах с расширением .test.js или .spec.js. Однако можно указать свои каталоги, если тесты находятся в нестандартных местах.

module.exports = {
  roots: ['<rootDir>/src'],
};

5. testMatch

Опция testMatch позволяет задавать паттерны для поиска тестовых файлов. Это более гибкий способ, чем roots, поскольку позволяет детализировать, какие именно файлы будут тестироваться. Например, можно указать, что нужно искать файлы с тестами только в папке tests или только те, что заканчиваются на .spec.js.

module.exports = {
  testMatch: ['**/tests/**/*.spec.js'],
};

6. moduleNameMapper

Для проектов с использованием модулей, таких как React или TypeScript, часто требуется настроить пути для импорта. Параметр moduleNameMapper позволяет Jest правильно обрабатывать такие импорты, маппируя их на реальные пути файлов. Это особенно важно, когда используются алиасы путей или нестандартные расширения файлов.

module.exports = {
  moduleNameMapper: {
    '^@components/(.*)$': '<rootDir>/src/components/$1',
  },
};

7. transform

Опция transform позволяет настроить, как Jest будет обрабатывать различные типы файлов до выполнения тестов. Например, для использования с TypeScript необходимо указать преобразование файлов с помощью ts-jest, а для работы с JSX — babel-jest.

module.exports = {
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
  },
};

8. collectCoverage

Параметр collectCoverage активирует сбор статистики покрытия тестами. Если установить его в true, Jest будет собирать данные о том, какие части кода были протестированы, а какие — нет. Это помогает отслеживать, насколько полно покрыты тестами различные модули приложения.

module.exports = {
  collectCoverage: true,
};

9. coverageDirectory

Опция coverageDirectory указывает, в какой папке будет сохранена информация о покрытии. Обычно Jest создает папку coverage в корне проекта, но можно изменить это расположение, указав путь к другой директории.

module.exports = {
  collectCoverage: true,
  coverageDirectory: 'coverage/reports',
};

10. setupFiles

Параметр setupFiles позволяет указать файлы, которые должны быть выполнены перед запуском тестов. Это полезно для настройки глобальных переменных или подключения библиотек, таких как библиотеки для работы с моками или шпионскими функциями.

module.exports = {
  setupFiles: ['<rootDir>/test/setup.js'],
};

11. globalSetup и globalTeardown

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

module.exports = {
  globalSetup: './test/globalSetup.js',
  globalTeardown: './test/globalTeardown.js',
};

12. testPathIgnorePatterns

Если необходимо исключить определенные файлы или папки из процесса тестирования, можно использовать параметр testPathIgnorePatterns. Это полезно, когда в проекте есть файлы, не относящиеся к тестам, но по каким-то причинам Jest может попытаться их тестировать.

module.exports = {
  testPathIgnorePatterns: ['/node_modules/', '/dist/'],
};

13. moduleFileExtensions

Опция moduleFileExtensions указывает, какие расширения файлов Jest должен воспринимать как модули. Это полезно для проектов, где используются нестандартные расширения или когда нужно изменить порядок приоритетов расширений.

module.exports = {
  moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json'],
};

14. maxWorkers

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

module.exports = {
  maxWorkers: '50%',
};

15. clearMocks

Когда необходимо сбросить мок-функции и шпионы между тестами, можно активировать параметр clearMocks. Установив его в true, Jest будет очищать все моки после каждого теста, что предотвращает накопление состояния между тестами и предотвращает утечки.

module.exports = {
  clearMocks: true,
};

Пример файла конфигурации

Пример настройки файла jest.config.js для проекта с использованием TypeScript и React:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'jsdom',
  roots: ['<rootDir>/src'],
  testMatch: ['**/tests/**/*.spec.tsx'],
  moduleNameMapper: {
    '^@components/(.*)$': '<rootDir>/src/components/$1',
  },
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
  },
  collectCoverage: true,
  coverageDirectory: 'coverage/reports',
  setupFiles: ['<rootDir>/test/setup.js'],
  testPathIgnorePatterns: ['/node_modules/', '/dist/'],
  maxWorkers: '50%',
};

Этот файл конфигурации задает параметры для работы с TypeScript и React, активирует сбор покрытия тестами, настраивает пути для маппинга модулей и исключает ненужные файлы из тестирования.