vscode 中覆盖率高亮不显示,首要原因是 lcov.info 未生成、路径错误或测试未收集覆盖率;需确认 jest/mocha 正确配置 --coverage 或 nyc 包裹执行,并确保 coverage gutters 插件路径设置匹配实际 lcov.info 位置。

VSCode 里看不到覆盖率高亮?大概率不是插件没装,而是 lcov.info 没生成、路径不对,或者测试根本没跑出覆盖率数据。
确认 Jest 或 Mocha 是否真生成了 lcov.info
很多人的配置只跑了测试,没开启覆盖率收集 —— 这是第一道坎。
-
jest用户:确保package.json中的test:coverage脚本含--coverage参数,且未被collectCoverage: false覆盖;默认输出路径是coverage/lcov.info,可查文件是否存在 -
mocha + nyc用户:运行nyc npm run test(而非直接npm run test),nyc才会注入代码并生成coverage/lcov.info - 检查终端输出末尾是否有类似
Writing coverage object [/path/to/coverage/coverage-final.json]或Writing lcov file ./coverage/lcov.info的日志 - 如果只有
coverage/coverage-final.json没有lcov.info,在.nycrc里显式加"reporter": ["lcov", "text"],lcov是 Coverage Gutters 唯一认得的默认格式
Coverage Gutters 插件的路径匹配很严格
它不会自动扫描整个项目找报告,只按固定规则找 —— 路径错一丁点就静默失败。
- 默认查找位置:项目根目录下的
coverage/lcov.info - 如果你用
nyc --report-dir ./reports或 Jest 的coverageDirectory: "reports",就得在 VSCode 设置里手动指定:coverage-gutters.lcovname设为reports/lcov.info - 别信“自动发现”——插件不解析
package.json或.nycrc,只认你填的字符串路径 - 路径支持相对路径(如
dist/coverage/lcov.info),但不能以./开头;填错会报File not found却不弹窗提醒,只在 VSCode 输出面板(Output → Coverage Gutters)里悄悄打印错误
覆盖率高亮不随保存自动刷新?检查三个开关
自动刷新不是开箱即用,需要手动对齐三处配置,缺一不可。
- VSCode 设置中开启
coverage-gutters.autoRefresh(布尔值,设为true) - 确保你配置的测试命令(比如
npm run test:coverage)每次执行都**覆盖写入**lcov.info,而不是追加或跳过生成(某些 watch 模式下会缓存旧报告) - 插件监听的是文件系统事件,如果测试命令在子 shell 或 Docker 容器里跑,
lcov.info实际写入宿主机不同路径,VSCode 就收不到变更通知 - 临时验证是否生效:手动改一行源码 → 保存 → 运行测试命令 → 等几秒 → 看侧边栏颜色是否更新;若不更新,先关掉 autoRefresh,用命令面板执行
Coverage-Gutters: Reload手动触发一次
为什么部分文件显示灰色或完全没标记?
不是 bug,是 Istanbul 默认只 instrument 被测试实际 import 的文件 —— 未被引用的模块天然“不可见”。
- 想让所有
src/下文件参与统计,必须在.nycrc中设"all": true;否则src/utils/unused.js即使存在也不会出现在报告里 - 排除规则写错会导致误剔:例如
"exclude": ["src/**/*.test.js"]本意排除测试文件,但如果写成"exclude": ["**/*.test.js"],而你的源码也带.test.js后缀(比如api.test.js),就会被连带过滤 - TypeScript 项目常见坑:若用
@istanbuljs/nyc-config-typescript,它默认只包含src/**/*.ts,但如果你的构建产物(如dist/*.js)也被测试直接 require,就得把dist加进include,否则那些 JS 行不会被标记
真正卡住人的是路径和生成时机 —— 插件不聪明,它只读文件;工具链不透明,它不报错。盯住 coverage/lcov.info 是否存在、是否被更新、是否被插件定位到,比调任何高级参数都管用。











