应配置覆盖率工具排除 mock 文件以避免拉低数值:jest 用 collectcoveragefrom 和 coveragepathignorepatterns,vitest 在 coverage.exclude 中设置,nyc 用 --exclude 或 .nycrc;优先动态 mock 而非 mocks 目录,并确保 mock 工具函数路径被排除。

Mock 代码本身不参与业务逻辑执行,但若被纳入覆盖率统计范围,会拉低整体覆盖率数值——尤其当 mock 文件单独存放、或在测试文件中内联大量 mock 实现时。关键不是“去掉 mock”,而是让覆盖率工具准确区分“可测的生产代码”和“不可测的测试辅助代码”。
明确覆盖率统计范围(推荐)
多数覆盖率工具(如 Istanbul / nyc、Vitest、Jest)支持通过配置排除特定路径或文件模式:
- Jest:在 jest.config.js 中用
collectCoverageFrom显式指定只统计src/**/*.{js,ts},并配合coveragePathIgnorePatterns排除__mocks__、test-utils、*.mock.*等目录或文件 - Vitest:在 vitest.config.ts 的
coverage.exclude中添加['**/__mocks__/**', '**/mocks/**', '**/*.mock.*'] - nyc(CLI 工具):使用
--exclude参数或.nycrc中的exclude字段
避免在源码中写 mock(尤其是 __mocks__ 夹层污染)
__mocks__ 目录下文件虽不运行,但若被构建或扫描工具误读,可能进入覆盖率报告。更稳妥的方式是:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 用
jest.mock()或vi.mock()在测试文件顶部动态 mock,而非依赖__mocks__/xxx.js - 将复用的 mock 工具函数统一放在
test-helpers/mock-xxx.ts并确保该路径已被 coverage 配置排除 - 不用
jest.setMock()等全局影响型 API,防止意外覆盖真实模块路径
检查生成报告是否包含无关内容
运行覆盖率后,打开 HTML 报告,手动确认以下位置未出现在统计列表中:
- 所有以
.test.、.spec.、.mock.结尾的文件 -
__tests__、__mocks__、test-utils等测试专用目录 - 仅含
jest.fn()、vi.fn()、mockResolvedValue等调用的“空壳 mock 文件”
补充:对真实模块做浅层 mock 不影响覆盖率
比如用 jest.mock('axios') 替换整个模块,或用 vi.mock('./api', async () => ({ fetchUser: vi.fn() })),这些声明本身不计入覆盖率——只要 mock 实现没写在 src/ 下,就不会稀释结果。真正要警惕的是把 mock 函数实现在组件或工具函数内部(例如在 React 组件里写 const api = jest.fn()),这种写法会让 mock 逻辑混入生产路径。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










