PHP 单元。错误:没有代码覆盖驱动程序可用。 (安装了xdebug)

Posted

技术标签:

【中文标题】PHP 单元。错误:没有代码覆盖驱动程序可用。 (安装了xdebug)【英文标题】:PHPUnit. Error: No code coverage driver is available. (having xdebug installed) 【发布时间】:2016-09-13 05:47:57 【问题描述】:

有一个类似问题的答案Laravel 5: phpUnit and no code coverage driver available 有效,但我安装了 xdebug。

(如果这个问题我用的是:windows7、netbeans8.1、php7、wamp3)

在 Netbeans 中显示代码覆盖率会导致:

错误:没有代码覆盖驱动程序可用

, 输出如下:

"C:\wamp\www\treningPHPUnitSymfony2.8\bin\phpunit.bat" "--colors" "--log-junit" "C:\Users\chiny\AppData\Local\Temp\nb-phpunit-log.xml" “--覆盖三叶草” “C:\Users\chiny\AppData\Local\Temp\nb-phpunit-coverage.xml” "C:\Program Files\NetBeans 8.1\php\phpunit\NetBeansSuite.php" "--" “--run=C:\wamp\www\treningPHPUnitSymfony2.8\src\TreningBundle\Tests\Controller\RabarbarControllerTest.php” Sebastian Bergmann 和贡献者的 PHPUnit 5.3.4。

错误:没有代码覆盖驱动程序可用

.II 3 / 3 (100%)

时间:1.13 秒,内存:4.00MB

好的,但是不完整、跳过或有风险的测试!测试:3,断言:1, 不完整:2. 完成。](url)

xdebug 配置(C:\wamp\bin\apache\apache2.4.17\bin\php.ini):

[xdebug]
zend_extension ="C:/wamp/bin/php/php7.0.1/zend_ext/php_xdebug-2.4.0rc3-7.0-vc14.dll"

xdebug.remote_enable = off
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = Off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir ="C:/wamp/tmp"
xdebug.show_local_vars=0

加载的扩展

(我在同一个 Windows 分区中有 netbeans 和项目目录)

【问题讨论】:

php.exe -v 告诉你什么?是否启用了 xdebug? C:\Windows\System32>php.exe -v PHP 7.0.1 (cli) (build: Dec 16 2015 13:36:30) (ZTS) Copyright (c) 1997-2015 The PHP Group Zend Engine v3.0.0,版权所有 (c) 1998-2015 Zend Technologies xdebug 如主帖最后一个打印屏幕所示在列表中 xdebug 在 CLI 中未启用。启用它,它应该可以工作。 谢谢,我会用谷歌搜索的。我认为如果扩展名在该列表中,我表示它已启用。 【参考方案1】:

在大多数 Apache/PHP 安装中有 2 个php.ini 文件,肯定在 WAMPServer 中

要修改 Apache 中 PHP 使用的正确 php.ini,请使用菜单

wampmanager->PHP->php.ini

但是对于 PHP CLI 使用的 php.ini 文件,您必须手动编辑

\wamp\bin\php\phpversion\php.ini

如果在 CLI 中配置了 XDEBUG,php -v 的结果应该如下所示

php -v
PHP 7.0.6 (cli) (built: Apr 27 2016 14:00:40) ( ZTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans

注意

当前的 WAMPServer 3 是3.0.4 ADDON 升级可以在 SourceForge 上找到

最新的 ADDON PHP 版本是 PHP7.0.6 也可以在 SourceForge 上获得

请参阅The WampServer Forum 以了解最新版本的 PHP / mysql / Apache ADDONS for WAMPServer 3

还有:

您可能会发现您必须在php.ini 中添加tweek the XDEBUG config parameters 才能满足您的特定需求

【讨论】:

没错。 php -v 的结果现在显示 xdebug 在 php 目录中编辑 php.ini 后,没有更多的 Error: No code coverage driver is available 而我有了新的 Error:No whitelist configured, no code coverage will be generated,但我认为这是一个进步,也是新谷歌搜索和另一个主题的问题。感谢所有提示! 查看 XDEBUG 文档,特别是 xdebug.coverage_enable【参考方案2】:

我在新安装 PHP 7.1 时遇到了这个问题,这就是我为使其正常工作所做的工作

$ brew install php71-xdebug

$ php -i | grep xdebug // 检查是否安装了 xdebug

$ phpunit

之后它起作用了。此外,这就是我的 phpunit.xml 看起来我需要将整个结构列入白名单的方式,因为它是共享组件

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
         syntaxCheck="false">
    <testsuites>
        <testsuite name="Tests">
            <directory suffix=".php">./Tests/</directory>
        </testsuite>
    </testsuites>
    <logging>
        <log type="coverage-clover" target="./build/logs/clover.xml"/>
    </logging>
    <filter>
        <whitelist addUncoveredFilesFromWhitelist="true">
            <directory>./</directory>
        </whitelist>
    </filter>
</phpunit>

此解决方案仅适用于 MacOS,如果您想使其在 Linux 上运行,则需要使用适用的包管理器,如 apt-get 等。

【讨论】:

是的,在 linux 上,您需要在 debian 系统上使用其他包管理器,例如 apt-get 如果 Fedora GNU/Linux 您可以使用sudo dnf install php-xdebug,它将安装您拥有的任何版本的 php 的软件包。【参考方案3】:

在 Debian 上遇到同样的问题:

错误:没有代码覆盖驱动程序可用

我通过安装 php-xdebug 修复了它:sudo apt install php-xdebug

【讨论】:

它对我有用。非常感谢! 在我的情况下,它已安装,但在构建过程中被 Docker 映像的作者禁用。我需要phpenmod xdebug

以上是关于PHP 单元。错误:没有代码覆盖驱动程序可用。 (安装了xdebug)的主要内容,如果未能解决你的问题,请参考以下文章

Symfony3.4:PHPUnit并且没有可用的代码覆盖驱动程序[关闭]

phpunit 单元测试之代码覆盖率

没有配置白名单,没有代码覆盖会产生错误

如何为单元测试覆盖 insertable=false

如何使用程序代码库在 PHP 中编写单元测试?

slather 错误,当试图获得代码覆盖率时