运行 在单独的进程中测试时,PHPUnit 无法生成代码覆盖率

PHPUnit can't generate code coverage when running tests in separate processes

我有一个问题,我无法在 Google 上找到解决方案。 当我 运行 使用 PHPUnit 和 Xdebug 进行单元测试时,我想进行代码覆盖。

但是,当我这样做时,出现了这个错误:

PHPUnit\Framework\Exception: Fatal error: Uncaught SebastianBergmann\CodeCoverage\NoCodeCoverageDriverAvailableException: No code coverage driver available in /Users/theobenoit/Desktop/Antipode.nosync/Sites/wp-framework-core/vendor/phpunit/php-code-coverage/src/Driver/Selector.php:53
   ├ Stack trace:
   ├ #0 Standard input code(43): SebastianBergmann\CodeCoverage\Driver\Selector->forLineCoverage(Object(SebastianBergmann\CodeCoverage\Filter))
   ├ #1 Standard input code(123): __phpunit_run_isolated_test()
   ├ #2 {main}
   ├   thrown in /Users/theobenoit/Desktop/Antipode.nosync/Sites/wp-framework-core/vendor/phpunit/php-code-coverage/src/Driver/Selector.php on line 53

我意识到这是因为在我的一些测试中顶部有这个:

/**
 * @runTestsInSeparateProcesses
 * @preserveGlobalState disabled
 */

当我删除 @runTestsInSeparateProcesses 时,一切正常,但由于我模拟函数而出现问题。

如果有人遇到过这个问题。

这可能是因为 runTestsInSeparateProcesses,PHPUnit 会为每个测试启动一个新的 PHP 过程。而且它似乎在没有加载 Xdebug 的情况下做到了这一点。

为每个测试启动的 PHP 需要与您最初启动 PHP 单元的相同。也许 PATH 中首先有一个不同的 PHP 二进制文件?

如果是这种情况,解决方法是确保“正确的”PHP在PATH中排在第一位。

我可以通过在没有映射时禁用强制中断来解决同样的问题,这是 xdebug-settings 下的 IDE 中的设置。

参见: https://intellij-support.jetbrains.com/hc/en-us/community/posts/360009770579-Docker-debug-problem-Remote-file-path-home-www-Standard-input-code-is-not-mapped-to-any-file-path-in-project-