javascript单元测试中配置覆盖黑名单是在覆盖率工具配置中指定不统计的文件路径,jest用coveragepathignorepatterns(正则数组),vitest用coverage.exclude(glob模式),nyc用exclude(minimatch glob);黑名单不影响测试执行,仅排除统计。

在 JavaScript 单元测试中配置测试覆盖黑名单,本质是告诉覆盖率工具“哪些文件或路径不参与统计”,而不是跳过测试执行。这个操作发生在覆盖率收集阶段,必须在对应工具的配置文件里设置路径过滤规则,不能靠在测试代码里加注释或手动 ignore。
Jest 中配置覆盖黑名单
在 jest.config.js 或 package.json 的 jest 字段下使用 coveragePathIgnorePatterns:
- 它接收一个正则字符串数组,每个字符串会被自动转为
RegExp - 常见写法:
coveragePathIgnorePatterns: [ '<rootdir>/node_modules/', '<rootdir>/dist/', '<rootdir>/build/', '.*\.d\.ts$', '<rootdir>/test-utils/' ]</rootdir></rootdir></rootdir></rootdir>
- 注意:
<rootdir></rootdir>是 Jest 自动替换的项目根路径,不要写成绝对路径
Vitest 中配置覆盖黑名单
在 vitest.config.ts 的 coverage.exclude 字段填入 glob 模式:
export default defineConfig({
test: {
coverage: {
exclude: [
'node_modules',
'dist',
'build',
'**/*.test.*',
'**/mocks/**',
'src/types/**'
]
}
}
})
- 支持通配符(如
**/mocks/**),也支持相对路径 - 不要混用正则和 glob;Vitest 只认 glob
nyc / Istanbul 中配置覆盖黑名单
在 .nycrc 或 package.json#nyc 下使用 exclude 字段:
{
"exclude": [
"node_modules/**",
"dist/**",
"build/**",
"**/*.test.js",
"**/e2e/**"
]
}
- 语法是 minimatch glob,不是正则表达式
- 排除项会递归匹配子目录
配置时要注意的关键点
- 黑名单只影响覆盖率报告的统计范围,不影响测试是否运行:被排除的文件里的测试仍会执行,只是其中的代码行、分支不会计入覆盖率数字
- 第三方依赖(如
node_modules)必须排除,否则覆盖率会被大量无关代码拉低,失去参考价值 - 工具生成的文件(如
dist/、build/、类型声明.d.ts)也建议排除,它们不是源码逻辑的一部分 - 测试辅助文件(如
test-utils/、mocks/)若含业务逻辑,需谨慎判断是否排除;否则容易掩盖真实覆盖缺口
基本上就这些。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











