VSCode不生成也不解析PHP的PHPUnit覆盖率数据,必须由phpunit显式输出lcov.info报告,再由Coverage Gutters插件读取渲染;漏掉生成、路径不匹配或格式错误任一环节,状态栏即显示“No coverage data”。

VSCode 本身不生成 PHP 的 PHPUnit 覆盖率数据,也**不自动解析或展示**它;你必须让 phpunit 输出标准格式报告(如 lcov.info),再由插件(如 Coverage Gutters)读取渲染——漏掉任一环节,状态栏就永远显示 “No coverage data”。
PHPUnit 必须显式启用并输出 lcov 格式
默认运行 ./vendor/bin/phpunit 不会产生任何覆盖率文件。你得加参数强制生成,且格式必须是 Coverage Gutters 能认的:
-
phpunit命令行需包含--coverage-lcov coverage/lcov.info(不是--coverage-html或--coverage-clover) - 若用
phpunit.xml配置,要确保<logging>下有:<log type="coverage-lcov" target="coverage/lcov.info"/>
- 路径
coverage/lcov.info必须相对于项目根目录;Coverage Gutters 默认只查这个位置,不递归、不猜路径 - 别用
--coverage-text—— 它只打印到终端,不落地为文件,插件完全看不到
Coverage Gutters 插件配置必须匹配实际输出
它不干活,只读文件。常见失效原因全是路径或格式错位:
- 打开 VSCode 设置,搜
coverage-gutters.coverageFileNames,确认值包含"lcov.info"(默认已含,但有人手动删过) - 多根工作区(multi-root)下,每个子文件夹需单独配
.vscode/settings.json,不能只在最外层设一次 - 如果
phpunit在 Docker 或 WSL 中运行,lcov.info里记录的路径可能是/app/src/...,而你在 VSCode 里打开的是C:\project\src\...—— 路径前缀不一致,行染色直接失效 - 临时验证:终端执行
cat coverage/lcov.info | head -n 5,确认文件非空且首行是SF:开头的源文件路径
VSCode 测试侧边栏运行 ≠ 自动生成覆盖率
点击 Test Explorer 里的 ▶️ 图标,背后调用的是 VS Code 内置测试 API,它**不会自动追加 --coverage-lcov 参数**,也不会触发 Coverage Gutters 刷新:
立即学习“PHP免费学习笔记(深入)”;
- 想点一下就出覆盖率?得用
tasks.json自定义任务,命令写死:./vendor/bin/phpunit --coverage-lcov coverage/lcov.info
- 然后绑定快捷键(如 Ctrl+Shift+P → “Tasks: Run Task”),或配置保存后自动触发该 task
- 别依赖右键菜单里的 “Run Test” —— 它和覆盖率插件无任何通信,跑完你也得手动执行 “Coverage Gutters: Refresh”
- 如果你用的是 Xdebug + launch.json 调试测试,
args字段里也得加上--coverage-lcov,否则断点调试时照样没报告
最常被忽略的一点:PHP CLI 和 Web Server(如 Apache/FPM)的 php.ini 是两套配置。即使 php --ini 显示加载了 Xdebug,phpunit 命令也可能因未启用 coverage 扩展而静默失败——务必在终端直接运行完整命令验证输出,别只看 VSCode 侧边栏有没有绿色对勾。



















