我遇到了一个问题,在 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 需要与您最初启动 PHPUnit 的 PHP 相同。也许 PATH 中首先有一个不同的 PHP 二进制文件?
如果是这种情况,解决方法是确保“正确的”PHP 位于 PATH
的第一位。
关于在单独的进程中运行测试时,PHPUnit 无法生成代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68541803/