Файл jest.config.js является важным элементом настройки
тестовой среды в проекте с использованием Jest. Этот файл служит для
конфигурации поведения Jest, позволяя разработчику гибко настроить
тестирование. Важность правильной настройки заключается в том, что она
позволяет оптимизировать тестирование, улучшить производительность и
повысить точность выполнения тестов.
verboseПараметр verbose управляет выводом информации в консоль
при выполнении тестов. Если установлено значение true, Jest
будет выводить подробную информацию о каждом тесте, включая его название
и результат. Это полезно для отслеживания каждого теста, когда нужно
получить детализированный вывод, особенно в больших проектах.
module.exports = {
verbose: true,
};
presetПоле preset позволяет указать предустановленную
конфигурацию, которая может быть полезна для быстрой настройки Jest под
конкретную среду. Например, для использования с React проектами часто
используется react, для работы с TypeScript —
ts-jest. Это значительно упрощает конфигурацию и устраняет
необходимость в детальной настройке каждого параметра.
module.exports = {
preset: 'ts-jest',
};
testEnvironmentЭтот параметр указывает, в какой среде будут выполняться тесты. По
умолчанию Jest использует среду jsdom, которая имитирует
браузер. Однако для Node.js приложений можно установить
node, чтобы тесты выполнялись в окружении сервера.
module.exports = {
testEnvironment: 'node',
};
rootsПараметр roots указывает Jest, где искать тесты. По
умолчанию Jest ищет тестовые файлы в папках __tests__ и в
любых файлах с расширением .test.js или
.spec.js. Однако можно указать свои каталоги, если тесты
находятся в нестандартных местах.
module.exports = {
roots: ['<rootDir>/src'],
};
testMatchОпция testMatch позволяет задавать паттерны для поиска
тестовых файлов. Это более гибкий способ, чем roots,
поскольку позволяет детализировать, какие именно файлы будут
тестироваться. Например, можно указать, что нужно искать файлы с тестами
только в папке tests или только те, что заканчиваются на
.spec.js.
module.exports = {
testMatch: ['**/tests/**/*.spec.js'],
};
moduleNameMapperДля проектов с использованием модулей, таких как React или
TypeScript, часто требуется настроить пути для импорта. Параметр
moduleNameMapper позволяет Jest правильно обрабатывать
такие импорты, маппируя их на реальные пути файлов. Это особенно важно,
когда используются алиасы путей или нестандартные расширения файлов.
module.exports = {
moduleNameMapper: {
'^@components/(.*)$': '<rootDir>/src/components/$1',
},
};
transformОпция transform позволяет настроить, как Jest будет
обрабатывать различные типы файлов до выполнения тестов. Например, для
использования с TypeScript необходимо указать преобразование файлов с
помощью ts-jest, а для работы с JSX —
babel-jest.
module.exports = {
transform: {
'^.+\\.tsx?$': 'ts-jest',
},
};
collectCoverageПараметр collectCoverage активирует сбор статистики
покрытия тестами. Если установить его в true, Jest будет
собирать данные о том, какие части кода были протестированы, а какие —
нет. Это помогает отслеживать, насколько полно покрыты тестами различные
модули приложения.
module.exports = {
collectCoverage: true,
};
coverageDirectoryОпция coverageDirectory указывает, в какой папке будет
сохранена информация о покрытии. Обычно Jest создает папку
coverage в корне проекта, но можно изменить это
расположение, указав путь к другой директории.
module.exports = {
collectCoverage: true,
coverageDirectory: 'coverage/reports',
};
setupFilesПараметр setupFiles позволяет указать файлы, которые
должны быть выполнены перед запуском тестов. Это полезно для настройки
глобальных переменных или подключения библиотек, таких как библиотеки
для работы с моками или шпионскими функциями.
module.exports = {
setupFiles: ['<rootDir>/test/setup.js'],
};
globalSetup и
globalTeardownЭти параметры позволяют задать функции, которые выполняются до и после всего набора тестов. Они полезны для настройки и очистки внешних ресурсов, например, баз данных, серверов или кэша.
module.exports = {
globalSetup: './test/globalSetup.js',
globalTeardown: './test/globalTeardown.js',
};
testPathIgnorePatternsЕсли необходимо исключить определенные файлы или папки из процесса
тестирования, можно использовать параметр
testPathIgnorePatterns. Это полезно, когда в проекте есть
файлы, не относящиеся к тестам, но по каким-то причинам Jest может
попытаться их тестировать.
module.exports = {
testPathIgnorePatterns: ['/node_modules/', '/dist/'],
};
moduleFileExtensionsОпция moduleFileExtensions указывает, какие расширения
файлов Jest должен воспринимать как модули. Это полезно для проектов,
где используются нестандартные расширения или когда нужно изменить
порядок приоритетов расширений.
module.exports = {
moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json'],
};
maxWorkersПараметр maxWorkers ограничивает количество потоков,
которые Jest может использовать для параллельного выполнения тестов. Это
важно для оптимизации времени выполнения тестов на мощных системах или
когда тесты зависят от системных ресурсов.
module.exports = {
maxWorkers: '50%',
};
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, активирует сбор покрытия тестами, настраивает пути для маппинга модулей и исключает ненужные файлы из тестирования.