phpstorm中run with coverage显示0%的根本原因是php cli未启用xdebug coverage模式:需确认cli加载的php.ini已正确配置zend_extension=xdebug.so和xdebug.mode=debug,coverage,并重启终端;同时phpstorm中须启用code coverage选项并正确设置源码路径。

PhpStorm 里 Run with Coverage 显示 0%,根本不是 PhpStorm 的问题,而是 PHP CLI 环境压根没启用 Xdebug coverage 模式。
php -m | grep xdebug 返回空 —— CLI 根本没加载 Xdebug
很多人在 php.ini 里配了 Xdebug,但忘了 PHP CLI 和 Web SAPI(比如 Apache)用的是不同配置文件。PHPUnit 测试走的是 CLI,所以必须验证 CLI 是否加载了 Xdebug:
- 执行
php -m | grep xdebug:无输出 → Xdebug 未加载到 CLI - 执行
php --ini查看 CLI 加载的 php.ini 路径,确认你编辑的是这个文件,不是 Apache/Nginx 下的 php.ini - 若用 Homebrew / apt / pecl 安装,可能需手动启用:Ubuntu 上常见路径是
/etc/php/*/cli/conf.d/20-xdebug.ini,确保该文件存在且内容正确 - Xdebug 3 必须用
zend_extension=xdebug.so(不是extension=),且路径要绝对或相对于 extension_dir
php -i | grep "xdebug.mode" 不含 coverage —— 模式没开对
Xdebug 3 移除了 xdebug.coverage_enable,只认 xdebug.mode。写错就等于没开:
- 错误写法:
xdebug.mode=debug、xdebug.mode=coverage(单独写 coverage 在某些版本下不生效)、xdebug.mode = debug, coverage(逗号后有空格 → 静默失败) - 正确写法(推荐):
xdebug.mode=debug,coverage(逗号紧贴,无空格) - 验证命令:
php -i | grep "xdebug.mode",输出应为xdebug.mode => debug,coverage => debug,coverage - 别依赖浏览器里的 phpinfo() 页面——它反映 Web 环境,和 PHPUnit 无关
Run with Coverage 后覆盖率面板空白或全 0% —— PhpStorm 设置没对齐
即使 Xdebug 已启用,PhpStorm 仍需显式切换为 Coverage 模式才能触发采集:
- 必须通过右键菜单选择
Run with Coverage,不是普通Run;普通 Run 不会调用xdebug_start_code_coverage() - 进
Settings → Tools → Coverage,确认Coverage runner设为Xdebug(即使你实际用 PCOV,当前 PhpStorm 版本仍只识别 Xdebug 为驱动) - 在
Run → Edit Configurations…中,选中对应 PHPUnit 配置,勾选Code Coverage复选框,并在Include paths里明确添加源码目录(如src/) - 如果用了
processUncoveredFiles="true"却仍看不到未执行文件,说明 phpunit.xml 没被识别——检查它是否在项目根目录,且顶层标签是<phpunit></phpunit>
覆盖率报告里 src/ 文件全没出现 —— phpunit.xml 的 include 路径写错了
路径错误会导致 PHPUnit 根本不把你的代码纳入统计范围,结果就是“0%”或“文件缺失”:
-
<directory suffix=".php">src/</directory>是相对于phpunit.xml所在目录的,不是项目根目录,也不是src/目录本身 - 典型错误:
phpunit.xml在tests/目录下,却写<directory>src/</directory>→ 实际找的是tests/src/,自然找不到 - 正确做法:把
phpunit.xml放项目根目录;或用相对路径如<directory>../src/</directory> - 务必加
processUncoveredFiles="true",否则未被任何测试执行的文件直接从报告里消失,你根本看不到漏测点在哪里
最容易被忽略的点:Xdebug coverage 模式只对 CLI 生效,而 PhpStorm 默认调用的正是 CLI;改完 php.ini 后必须重启终端(或 IDE),否则环境变量和配置不会刷新。另外,xdebug.start_with_request=yes 这种全局开启方式会让所有 CLI 命令变慢,只应在跑覆盖率时临时启用,日常开发建议关掉。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











