在 JavaScript 项目中,应通过 Jest 的 coveragePathIgnorePatterns 排除 tests、__mocks__、node_modules 等目录的覆盖率统计,或更优地用 collectCoverageFrom 精确指定源码路径,避免宽泛通配;Vitest 和 c8 有对应 exclude 配置。

在 JavaScript 项目中,排除测试覆盖率统计特定目录(比如 tests、__mocks__、node_modules 或构建产物目录)主要通过测试运行器(如 Jest)的配置实现。关键不是“跳过测试”,而是“不将这些文件纳入覆盖率收集范围”。
使用 Jest 的 coveragePathIgnorePatterns
这是最常用、最直接的方式。Jest 默认会基于 collectCoverageFrom 指定的源码路径计算覆盖率,但若某些目录被意外包含(例如你设了 "src/**/*" 却不想覆盖 src/utils/__mocks__),就用它来排除:
{
"collectCoverageFrom": ["src/**/*.{js,jsx,ts,tsx}"],
"coveragePathIgnorePatterns": [
"/node_modules/",
"/tests/",
"/__mocks__/",
"/dist/",
"/build/",
".*\.d\.ts$"
]
}
注意:coveragePathIgnorePatterns 是正则字符串数组,匹配的是文件的**相对路径(从项目根目录起)**,不是 glob 模式;路径分隔符统一用 /(Windows 下也建议用斜杠,Jest 内部会自动处理)。
精控源码范围:靠 collectCoverageFrom
比“先包含再排除”更推荐的做法是明确指定要测的源码路径,天然避开无关目录:
立即学习“Java免费学习笔记(深入)”;
- 只写具体业务目录:
"src/components/**/*.{js,ts}"、"src/hooks/**/*.{js,ts}" - 避免宽泛通配:
"src/**/*"容易把 mock、类型定义、测试辅助工具等卷进来 - 配合
ignore字段可进一步过滤(如忽略所有.test.和.spec.文件)
排除第三方或生成代码:用 coverageThreshold + reporters 辅助判断
有些目录(如自动生成的 API client、proto 生成代码)不适合测,也不应拉低整体覆盖率。虽然不能直接“排除统计”,但可通过以下方式弱化影响:
- 在
coverageThreshold中为这些目录设宽松阈值(甚至null),避免 CI 因它们失败 - 使用
lcovonlyreporter 输出详细报告,再用脚本过滤掉不需要的路径(适合高级定制) - 对
node_modules:Jest 默认不收集其覆盖率,无需额外配置;若用了collectCoverageFrom显式包含,请确保它不含node_modules
其他工具链注意事项
如果你用 Vitest 或 c8(如 nyc),配置方式略有不同:
-
Vitest:在
vitest.config.ts中设置coverage.exclude = ['tests', 'node_modules', '__mocks__'] -
c8(常用于 Mocha / AVA):CLI 参数
--exclude='tests/**' --exclude='**/__mocks__/**',或配置c8.config.js的exclude数组 - ESLint 或 TypeScript 不参与覆盖率计算,无需为它们配置排除项


















