Покрытие кода (code coverage) — это метрика, которая отображает, какая часть исходного кода была покрыта тестами. В Jest сбор покрытия является одной из важнейших возможностей, позволяющих разработчикам увидеть, насколько полно тесты проверяют их код, а также улучшить качество тестов. Настройка сбора покрытия в Jest довольно гибкая и может быть настроена под конкретные требования проекта.
По умолчанию Jest поддерживает сбор покрытия, но его необходимо явно
активировать. Для этого в конфигурации Jest нужно добавить параметр
collectCoverage, установив его значение в
true.
Пример базовой настройки:
{
"collectCoverage": true
}
Этот параметр можно добавить в файл конфигурации
jest.config.js, package.json или в команду,
которую запускает Jest. После активации Jest будет собирать информацию о
покрытии в процессе выполнения тестов.
Для более точной настройки сбора покрытия в Jest предусмотрено несколько опций, которые позволяют указать, какие именно файлы должны быть охвачены анализом покрытия. Эти параметры задаются через настройки в конфигурационном файле:
Пример настройки, которая собирает покрытие только для файлов в папке
src:
{
"collectCoverageFrom": ["src/**/*.js"]
}
Если нужно исключить определённые файлы или директории, это можно
сделать с помощью параметра coveragePathIgnorePatterns:
{
"coveragePathIgnorePatterns": ["/node_modules/", "/tests/"]
}
Этот параметр исключает файлы, расположенные в папке
node_modules и в папке с тестами.
Jest поддерживает несколько форматов отчётов о покрытии, что
позволяет интегрировать результаты с различными инструментами и
процессами. Форматы указываются через параметр
coverageReporters. Важно выбрать правильные форматы в
зависимости от того, как вы планируете анализировать и визуализировать
данные о покрытии.
Некоторые популярные форматы отчётов:
Пример настройки с несколькими форматами отчётов:
{
"coverageReporters": ["text", "lcov", "json"]
}
После этого Jest будет генерировать отчёты в указанных форматах. Для
формата lcov обычно генерируется директория
coverage/lcov-report, в которой будет доступен
HTML-отчёт.
Jest позволяет задать минимальные пороги покрытия, чтобы тесты не проходили, если покрытие не соответствует заданным требованиям. Это полезно для обеспечения высокого качества тестов и предотвращения ситуаций, когда важные части кода остаются без тестирования.
Настройка минимального покрытия осуществляется через параметры:
Пример настройки с минимальными требованиями к покрытию:
{
"coverageThreshold": {
"global": {
"branches": 80,
"functions": 90,
"lines": 95,
"statements": 95
},
"src/utils.js": {
"branches": 100
}
}
}
В этом примере глобально задаются минимальные значения для всех
файлов, а для файла src/utils.js требуется 100% покрытия по
ветвям.
Иногда бывает необходимо исключить определённые участки кода из анализа покрытия, например, для кодов, которые невозможно или не нужно тестировать (конфигурации, сгенерированные файлы и т. д.).
Для исключения кода из покрытия используются комментарии:
/* istanbul ignore next */
function ignoredFunction() {
// Эта функция не будет учтена в покрытии
}
Такой комментарий исключает функцию ignoredFunction из
отчёта о покрытии. Также можно игнорировать целые блоки:
/* istanbul ignore file */
Этот комментарий исключает весь файл из анализа покрытия.
Интеграция с системами Continuous Integration (CI) позволяет
автоматизировать процесс сбора покрытия и проверку минимальных порогов
покрытия. С помощью параметра coverageThreshold можно
настроить так, чтобы сбор покрытия был обязательным этапом
CI-процесса.
Для этого важно настраивать отчёты в формате json,
который можно использовать для анализа в других системах:
{
"coverageReporters": ["json"]
}
После этого можно интегрировать данные покрытия в такие системы, как Jenkins или GitLab CI, для автоматической проверки.
Сбор покрытия может быть дорогим с точки зрения времени выполнения тестов, особенно в крупных проектах с множеством файлов. Поэтому важно оптимизировать процесс тестирования, чтобы он оставался быстрым и эффективным.
Инициализация покрытия только для изменений — с
помощью опции --onlyChanged можно собирать покрытие только
для изменённых файлов, что значительно ускоряет процесс
тестирования.
Пример команды для запуска тестов только для изменённых файлов:
jest --coverage --onlyChangedПараллельный запуск тестов — Jest поддерживает
параллельное выполнение тестов, что позволяет ускорить сбор покрытия для
больших проектов. Этот параметр включён по умолчанию, но его можно
настроить через maxWorkers.
Настройка сбора покрытия в Jest даёт мощные инструменты для контроля качества кода и тестов. Гибкость настройки позволяет точно определить, какие файлы и участки кода должны быть покрыты тестами, а также задать пороговые значения для гарантии высокой полноты покрытия. Важно правильно интегрировать сбор покрытия в процесс CI/CD, чтобы обеспечить автоматическую проверку качества тестов на всех этапах разработки.