测试覆盖范围:您是否设置了Xdebug的覆盖模式?
#php #测试 #phpunit #pestphp

如果您使用的是pestphp,并且在执行测试期间,则使用覆盖范围选项,您将收到消息:

Unable to get coverage using Xdebug. Did you set Xdebug's coverage mode?

您应该检查以下三件事之一:

  • 检查Xdebug配置;
  • 设置xdebug_mode环境变量;
  • 调整Phpunit配置文件。

检查Xdebug配置

我的第一个建议是在php.ini文件中检查您的Xdebug配置:

[xdebug]
zend_extension="xdebug.so"
xdebug.mode=develop,debug,coverage
xdebug.start_with_request = yes

使用xdebug.mode参数,您必须检查coverage值的存在。

设置xdebug_mode参数

指示Xdebug使用覆盖模式的另一种方法是使用XDEBUG_MODE环境变量。
您可以在一个命令行中设置环境变量并启动测试:

XDEBUG_MODE=coverage ./vendor/bin/pest --coverage

在phpunit.xml文件中设置覆盖范围部分

如果前两个解决方案(非常相似)不起作用,则可以检查phpunit配置。
在引擎盖下,Pestphp使用了出色的工具phpunit。是的,作为PHP开发人员,我们很幸运拥有用于软件开发的最佳开源工具。
因此,Phpunit配置反映并影响Pestphp的执行。
对于覆盖范围操作,在Phpunit配置中,您应该使用coverage部分。
coverage部分中,请确保您包括正确的目录(源代码所在的位置)。因此,例如,如果您在src/目录中具有源代码,请检查是否具有coverage部分,其中包含phpunit.xmlphpunit.xml.dist文件中的适当的include

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php"
         backupGlobals="false"
         backupStaticAttributes="false"
         colors="true"
         verbose="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">

    ... other configuration settings ...

    <coverage processUncoveredFiles="true">
        <include>
            <directory suffix=".php">./src</directory>
        </include>
    </coverage>
</phpunit>

如果您有“ Unable to get coverage using Xdebug”问题,请告诉我这些解决方案是否适合您。