我已将我的项目 PHP 版本升级到 8,并将 PHPUnit 升级到 9.x,但不再生成覆盖率报告?
I`ve upgraded my project PHP version to 8 and upgrage PHPUnit into 9.x but coverage reports are not generated anymore?
我尝试从 PHP 7 迁移到 PHP 8。我更新了所有依赖项,然后使用以下命令转换 PHP 单元配置:
./vendor/bin/phpunit -c phpunit.xml --migrate-configuration
问题是不再生成覆盖率报告了?!虽然所有测试都正常。
这是结果 phpunit.xml 字段:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
bootstrap="./vendor/autoload.php"
stopOnWarning="false"
verbose="false"
backupGlobals="false"
backupStaticAttributes="false"
beStrictAboutTestsThatDoNotTestAnything="true"
beStrictAboutChangesToGlobalState="true"
beStrictAboutOutputDuringTests="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
colors="true">
<coverage includeUncoveredFiles="true">
<include>
<directory suffix=".php">./src</directory>
<directory suffix=".php">./http-process</directory>
</include>
<report>
<clover outputFile=".build/clover.xml" />
<html outputDirectory=".build/coverage" />
</report>
</coverage>
<php>
<var name="DB_DSN" value="sqlite::memory:" />
<var name="DB_USER" value="root" />
<var name="DB_PASSWD" value="" />
<var name="DB_DBNAME" value="pluf_test" />
<var name="DB_SCHEMA" value="sqlite" />
</php>
<testsuites>
<testsuite name="http process">
<directory>./tests/Process/Http/</directory>
</testsuite>
</testsuites>
<!-- Code coverage -->
<logging />
</phpunit>
所有测试运行正常,但没有覆盖率报告!!
也许最后一个 <logging />
元素会覆盖 coverage/report
?
我用谷歌搜索找到了这个问题。最后,我找到了解决方案。就我而言,xdebug 配置是问题所在。 XDebug 有一个设置可以启用或禁用 xdebug 的功能。如您所知,覆盖是 XDebug 功能。所以我只启用了如下功能:
xdebug.mode=debug,coverage
它还支持:
- off:未启用任何内容。
- develop:启用开发辅助工具,包括重载的 var_dump()。
- coverage:启用代码覆盖率分析
- 调试:启用单步调试。
- gcstats:启用垃圾收集统计
- 配置文件:启用配置文件
- trace:启用函数跟踪功能
有关详细信息,请参阅 Code Coverage:
我尝试从 PHP 7 迁移到 PHP 8。我更新了所有依赖项,然后使用以下命令转换 PHP 单元配置:
./vendor/bin/phpunit -c phpunit.xml --migrate-configuration
问题是不再生成覆盖率报告了?!虽然所有测试都正常。
这是结果 phpunit.xml 字段:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
bootstrap="./vendor/autoload.php"
stopOnWarning="false"
verbose="false"
backupGlobals="false"
backupStaticAttributes="false"
beStrictAboutTestsThatDoNotTestAnything="true"
beStrictAboutChangesToGlobalState="true"
beStrictAboutOutputDuringTests="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
colors="true">
<coverage includeUncoveredFiles="true">
<include>
<directory suffix=".php">./src</directory>
<directory suffix=".php">./http-process</directory>
</include>
<report>
<clover outputFile=".build/clover.xml" />
<html outputDirectory=".build/coverage" />
</report>
</coverage>
<php>
<var name="DB_DSN" value="sqlite::memory:" />
<var name="DB_USER" value="root" />
<var name="DB_PASSWD" value="" />
<var name="DB_DBNAME" value="pluf_test" />
<var name="DB_SCHEMA" value="sqlite" />
</php>
<testsuites>
<testsuite name="http process">
<directory>./tests/Process/Http/</directory>
</testsuite>
</testsuites>
<!-- Code coverage -->
<logging />
</phpunit>
所有测试运行正常,但没有覆盖率报告!!
也许最后一个 <logging />
元素会覆盖 coverage/report
?
我用谷歌搜索找到了这个问题。最后,我找到了解决方案。就我而言,xdebug 配置是问题所在。 XDebug 有一个设置可以启用或禁用 xdebug 的功能。如您所知,覆盖是 XDebug 功能。所以我只启用了如下功能:
xdebug.mode=debug,coverage
它还支持:
- off:未启用任何内容。
- develop:启用开发辅助工具,包括重载的 var_dump()。
- coverage:启用代码覆盖率分析
- 调试:启用单步调试。
- gcstats:启用垃圾收集统计
- 配置文件:启用配置文件
- trace:启用函数跟踪功能
有关详细信息,请参阅 Code Coverage: