В Jest покрытие кода позволяет определить, какие части тестируемого кода были покрыты тестами, а какие остались непроверенными. Однако в некоторых случаях необходимо игнорировать определенные участки кода, чтобы они не учитывались в статистике покрытия. Это может быть полезно, например, для игнорирования комментариев, блоков с конфиденциальной информацией или временных функций, которые не должны влиять на итоговую оценку покрытия.
Jest предоставляет несколько способов игнорировать код при подсчете покрытия, что позволяет более гибко настраивать процесс тестирования.
Jest позволяет игнорировать части кода при подсчете покрытия с помощью специальных комментариев. Это наиболее часто используемый и простой способ. Для этого можно использовать два типа комментариев:
/* istanbul ignore file */: Этот
комментарий игнорирует весь файл./* istanbul ignore next */: Этот
комментарий игнорирует только следующую строку кода.Для того чтобы игнорировать весь файл, можно поместить следующий комментарий в начало файла:
/* istanbul ignore file */
Этот комментарий говорит Jest (и инструменту Istanbul, который Jest использует для анализа покрытия), что весь код в файле должен быть исключен из подсчета покрытия. Это полезно, если файл содержит код, который не нуждается в тестировании, например, настройки, конфигурации или файлы, специфичные для окружения.
Если нужно игнорировать только определенную строку или блок кода,
можно использовать комментарий /* istanbul ignore next */
перед строкой, которую нужно исключить из покрытия:
/* istanbul ignore next */
const secretFunction = () => {
// Код, который не нужно покрывать тестами
};
Этот комментарий говорит Jest, что строка, следующая за ним, не должна учитываться в подсчете покрытия. Это может быть полезно для исключения временных решений, таких как заглушки или код, который не поддается тестированию.
.coveragerc для исключения файлов и папокКроме комментариев, Jest позволяет настраивать исключения с помощью
конфигурационного файла .coveragerc или соответствующих
опций в package.json. В этом файле можно указать, какие
файлы или каталоги не должны включаться в подсчет покрытия.
Пример .coveragerc:
{
"coveragePathIgnorePatterns": [
"/node_modules/",
"/dist/",
"/test-utils/"
]
}
Здесь перечислены директории и файлы, которые будут исключены из
анализа покрытия. Например, все файлы в каталоге
node_modules или скомпилированные файлы в dist
не будут учитывать в статистике покрытия, поскольку они обычно не
требуют тестирования.
Также можно настроить исключение файлов в
package.json:
"jest": {
"coveragePathIgnorePatterns": [
"/node_modules/",
"/build/"
]
}
Этот способ исключает папки и файлы из покрытия на уровне всей конфигурации Jest, что может быть удобным при работе с большим количеством файлов.
globalВ некоторых случаях необходимо игнорировать код, который динамически генерируется или используется только в специфических ситуациях, например, внутри условия. Для таких случаев можно использовать глобальные параметры Jest.
В конфигурации Jest можно задать параметры, которые будут
автоматически игнорировать участки кода при подсчете покрытия. Один из
таких методов — это использование global.istanbul для
определения, какие участки должны быть исключены из покрытия.
Пример конфигурации в jest.config.js:
module.exports = {
globals: {
'istanbul-ignore': true,
},
coveragePathIgnorePatterns: [
"/ignored-folder/",
],
};
Этот подход полезен, если требуется централизованно настроить игнорирование покрытия для определенных участков кода.
Тестируемость игнорируемого кода: Важно помнить, что игнорирование кода при подсчете покрытия не означает, что этот код не нужно тестировать. Это просто исключает его из статистики покрытия. Если код не тестируется, то такие участки не должны быть исключены из покрытия, а наоборот, требуют дополнительного внимания.
Объем покрытия: Использование комментариев для игнорирования кода может привести к занижению статистики покрытия, если игнорируется слишком много важных частей кода. Нужно всегда следить за тем, чтобы игнорировались только те участки, которые действительно не имеют отношения к тестируемому функционалу.
Использование флагов: В случае использования динамических флагов или условий для игнорирования кода, следует убедиться, что игнорирование происходит только при действительно специфичных условиях, а не в процессе обычной работы приложения.
Преимущество по отношению к другим методам:
Комментарии и конфигурационные файлы могут быть полезны для исключения
часто меняющихся участков кода. Однако для более стабильных исключений
можно использовать .coveragerc или настройки в
package.json.
Игнорирование части кода при подсчете покрытия в Jest может
значительно улучшить точность отчетов о тестировании и предоставить
больше гибкости при работе с определенными участками кода. Комментарии
istanbul ignore file и istanbul ignore next
позволяют удобно исключать ненужные части, в то время как использование
конфигурационных файлов и глобальных параметров позволяет
централизованно настроить исключения для всего проекта. Важно помнить о
балансировании игнорируемых участков и убедиться, что это не ведет к
занижению реального покрытия тестами.