推荐使用 collectCoverageFrom 白名单显式指定源码路径,如 "src/*/.{js,ts}" 并排除 __tests__、test、types 等目录;黑名单 coveragePathIgnorePatterns 作为补充,匹配绝对路径正则,两者共存时先白名单后黑名单过滤。

在 JavaScript 项目中做代码覆盖率(如使用 Jest、Istanbul 或 Vitest)时,排除测试文件、配置文件、类型声明、构建产物等不需要统计的目录或文件,是提升覆盖率报告准确性和可读性的关键一步。核心方法是通过配置工具的 collectCoverageFrom(白名单)或 coveragePathIgnorePatterns(黑名单)等选项实现。
用 collectCoverageFrom 显式指定要覆盖的源码路径
这是更推荐的方式——不依赖“排除”,而是只收集你真正关心的源文件。它天然规避了无关文件干扰,也避免误排除新增源码。
- 只匹配
src/下的.js、.ts文件,排除__tests__、test、types、assets等目录:
"collectCoverageFrom": [
"src/**/*.{js,ts}",
"!src/**/__tests__/**",
"!src/**/test/**",
"!src/**/types/**",
"!src/**/assets/**",
"!src/**/styles/**",
"!src/**/index.ts" // 可选:排除入口聚合文件
]
注意:glob 模式支持 ! 表示忽略,顺序重要——前面的规则先匹配,后面可覆盖(Jest 中按数组顺序生效)。
用 coveragePathIgnorePatterns 黑名单过滤路径
适合已有大量配置、或需快速屏蔽某类路径(如所有 .d.ts 或 node_modules 子目录)。
立即学习“Java免费学习笔记(深入)”;
- 正则形式,匹配文件绝对路径(含项目根路径):
"coveragePathIgnorePatterns": [ "/node_modules/", "/dist/", "/build/", "/coverage/", "/__tests__/", "\.d\.ts$", "/types/", "/mocks/" ]
⚠️ 注意:该选项不影响 collectCoverageFrom 的白名单逻辑;若两者共存,Jest 先根据白名单选出文件,再用此黑名单二次过滤。
针对不同测试工具的配置位置
-
Jest:写在
jest.config.js或package.json的jest字段中 -
Vitest:在
vitest.config.ts的coverage选项里,字段名相同(如include对应collectCoverageFrom,exclude对应coveragePathIgnorePatterns) -
Webpack + Istanbul:通过
babel-plugin-istanbul的exclude选项或nyc配置中的exclude字段控制
常见易忽略但建议排除的路径
-
src/**/*.spec.ts/src/**/*.test.ts—— 测试文件本身不应计入覆盖率 -
src/**/constants.ts、src/**/enums.ts—— 纯声明/枚举,无执行逻辑 -
src/**/index.ts—— 聚合导出文件,通常无业务逻辑 -
src/**/types/、src/**/interfaces/—— 类型定义不参与运行 -
public/、static/—— 静态资源非 JS 逻辑
不复杂但容易忽略。关键是明确「哪些才是真实承载业务逻辑的源码」,然后用白名单兜底,辅以黑名单查漏补缺。


















