Файл jest.config.js

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

Файл конфигурации Jest обычно представляется в формате CommonJS, что означает, что он экспортирует объект с настройками. Стандартный шаблон выглядит следующим образом:

module.exports = {
  // настройки
};

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

Основные параметры конфигурации

testEnvironment

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

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

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

transform

Параметр transform позволяет указать трансформеры, которые будут использоваться для обработки файлов перед их тестированием. Это полезно, когда необходимо работать с современным синтаксисом JavaScript (например, ES6 или JSX), который нужно преобразовать в совместимый с Node.js формат.

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

В этом примере используется трансформер babel-jest для обработки всех файлов с расширением .js или .jsx с помощью Babel.

moduleFileExtensions

Этот параметр определяет, какие расширения файлов Jest будет искать, когда будет импортировать модули. Это важно, если проект использует нестандартные расширения файлов, такие как .ts или .tsx в TypeScript-проектах.

Пример настройки:

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

testMatch

Настройка testMatch позволяет указать шаблоны для файлов, которые Jest будет считать тестами. Это может быть полезно, если нужно изменять стандартный путь к тестовым файлам или использовать нестандартные именования файлов.

Пример:

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

В этом случае Jest будет искать тесты, расположенные в папке __tests__ и имеющие расширение .test.js.

coverageDirectory

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

Пример:

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

collectCoverage

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

Пример:

module.exports = {
  collectCoverage: true,
};

setupFiles

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

Пример:

module.exports = {
  setupFiles: ['./jest.setup.js'],
};

В этом случае перед каждым тестом будет выполняться файл jest.setup.js.

moduleNameMapper

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

Пример:

module.exports = {
  moduleNameMapper: {
    '\\.(css|less)$': 'identity-obj-proxy',
  },
};

Этот пример показывает, как Jest может быть настроен для работы с модулями CSS или LESS, которые нужно маппировать на мок-объекты, так как тесты не нуждаются в реальной обработке стилей.

globals

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

Пример:

module.exports = {
  globals: {
    MY_GLOBAL_VAR: true,
  },
};

testPathIgnorePatterns

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

Пример:

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

Примеры сложных конфигураций

Jest позволяет комбинировать различные параметры для настройки более сложных сценариев. Например, если проект использует как JavaScript, так и TypeScript, можно настроить конфигурацию следующим образом:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
  },
  moduleFileExtensions: ['js', 'ts', 'tsx', 'json'],
  coverageDirectory: './coverage',
  collectCoverage: true,
};

В этом примере используется пресет ts-jest для поддержки TypeScript, а также настройка для покрытия кода и других стандартных параметров.

Советы по настройке

  • Необходимость использования jest.config.js: В случае простых проектов можно использовать команду Jest без явной конфигурации. Однако для более сложных проектов, где необходимо настроить поведение тестов, важно создать файл конфигурации.
  • Поддержка разных сред: Если проект работает в нескольких средах (например, в браузере и на сервере), можно использовать несколько конфигурационных файлов для разных сред или использовать одну конфигурацию с динамическим выбором настроек в зависимости от окружения.
  • Обработка нестандартных файлов: Для работы с нестандартными типами файлов, такими как изображения, можно использовать моки или специфичные для Jest трансформеры.

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