【问题标题】:Laravel 5: PHPUnit and no code coverage driver availableLaravel 5:PHPUnit 和没有可用的代码覆盖驱动程序
【发布时间】:2016-06-19 02:24:33
【问题描述】:

我想使用 PHPUnit 创建代码覆盖率报告。我已经尝试了很多在网上找到的安装设置。但似乎没有任何效果。

我使用最新版本的 Laravel 5 (>5.2) 和 PHPUnit v. 5.0.10。此外,我在运行 PHP 7 的 Mac OS X 10.9.5 上使用 MAMP。

当我运行集成在我的 Laravel 发行版中的 PHPUnit 时,我收到以下错误。

$ vendor/bin/phpunit -v
PHPUnit 5.0.10 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.0.0
Configuration: /Applications/MAMP/htdocs/myProject/phpunit.xml
Error:         No code coverage driver is available`

我的作曲家文件看起来像:

"require-dev": {
    "fzaninotto/faker": "~1.4",
    "mockery/mockery": "0.9.*",
    "phpunit/phpunit": "5.0.*",
    "phpunit/php-code-coverage": "^3",
    "symfony/css-selector": "2.8.*|3.0.*",
    "symfony/dom-crawler": "2.8.*|3.0.*"
},

我也试过以下命令:

/Applications/MAMP/bin/php/php7.0.0/bin/phpdbg -qrr ../../../htdocs/myProject/vendor/bin/phpunit -v

这似乎很好地设置了代码覆盖驱动程序,但最终导致异常:

$ /Applications/MAMP/bin/php/php7.0.0/bin/phpdbg -qrr ../../../htdocs/myProject/vendor/bin/phpunit -v
PHPUnit 5.0.10 by Sebastian Bergmann and contributors.

Runtime:       PHPDBG 7.0.0
Configuration: /Applications/MAMP/htdocs/myProject/phpunit.xml

[PHP Fatal error:  Uncaught ErrorException: include(/Applications/MAMP/htdocs/myProject/app/Exceptions/Handler.php): failed to open stream: Too many open files in /Applications/MAMP/htdocs/myProject/vendor/composer/ClassLoader.php:412
Stack trace:
...

phpunit.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
     backupStaticAttributes="false"
     bootstrap="bootstrap/autoload.php"
     colors="true"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     processIsolation="false"
     stopOnFailure="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>./tests/</directory>
        </testsuite>
    </testsuites>
    <logging>
      <log type="coverage-html" target="./tests/codeCoverage" charset="UTF-8"/>
    </logging>
    <filter>
        <whitelist>
            <directory suffix=".php">app/</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>
</phpunit>

是否可以将 Laravel 框架自带的 PHPUnit 与代码覆盖一起使用?我应该如何设置和使用它?

非常感谢您的帮助。

【问题讨论】:

    标签: phpunit code-coverage laravel-5.2


    【解决方案1】:

    您似乎缺少 Xdebug 扩展。如果您使用的是自制软件,您可以像这样安装它:

    brew install php70-xdebug
    

    之后,不要忘记编辑 php.ini 文件以启用扩展。

    php -i | grep xdebug
    

    检查 xdebug 是否启用后,您应该能够进行代码覆盖

    【讨论】:

    • 我使用自制软件安装 xdebug。如何在 php.ini 中启用扩展?我启用了以下行zend_extension="/Applications/MAMP/bin/php/php7.0.0/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so"。路径有效。我知道这不是自制软件安装的 xdebug 的路径。但是自制软件将 xdebug 安装到了哪里呢?我在我的系统上找不到它。
    • 使用 php -i | grep php.ini 查看加载的配置 php.ini 文件在哪里。找到它后,只需在文件末尾添加您在上面提供的行。在我的例子中,自制软件在 zend_extension="/usr/local/opt/php70-xdebug/xdebug.so" 中安装了扩展
    • 现在可以使用了。我使用了 homebrew 安装的 xdebug 应用程序。我实际上编辑了位于/Applications/MAMP/conf/php7.0.0 的错误php.ini 文件。在编辑位于/Applications/MAMP/bin/php/php7.0.0/conf 的正确 php.ini 文件并重新启动 MAMP Web 服务器后,phpunit 现在运行代码覆盖率。感谢您的帮助。
    • 显然此解决方案仅适用于 Mac 用户。我们其他人可以使用yum install php73-xdebug 或类似名称。
    • Form xampp 用户,你只需要在php.in 中启用xdebug 扩展(只需设置zend_extension 的路径,如下所示:/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-XXXXXXXX/xdebug.so),然后重启你的服务器,无需使用自制软件或安装任何东西。
    【解决方案2】:

    为其他卡住的人更新;

    pecl install xdebug

    【讨论】:

    • 您应该添加sudo pecl install xdebug。安装此命令。
    【解决方案3】:

    Windows 用户:

    1) 下载xdebug

    2) 将文件重命名为 _php_xdebug.dll_ 并将文件复制到 php 安装中的 ext 文件夹,例如 C:\Program Files (x86)\php\ext

    3) 打开您的 php.ini 文件。对我来说,它位于 C:\Program Files (x86)\php\php.ini

    4) 将以下代码粘贴到文件底部。

    zend_extension = php_xdebug.dll
    xdebug.remote_enable = 1
    xdebug.remote_handler = dbgp
    xdebug.remote_host = localhost
    xdebug.remote_autostart = 1
    xdebug.remote_port = 9000
    xdebug.show_local_vars = 1
    

    【讨论】:

    • 这个也需要添加 - xdebug.mode=coverage
    【解决方案4】:

    PHP 7.1 更新

    xdebug 对于代码查找和覆盖是必不可少的,因此必须在测试环境中安装或启用 xdebug。生产环境中的xdebug不建议使用,开启会影响性能

    brew install php71-xdebug

    【讨论】:

      【解决方案5】:

      正如其他开发人员回答的那样,您需要安装 PHP Xdebug,但我想为使用 homestead 默认安装 Xdebug(但它已关闭)的开发人员添加新建议,您可以将其设为 ON 或 OFF

      如果你想在宅基地下面的命令中使用它

      #for on :
      xon
      
      #for off:
      xoff
      

      然后勾选php -v,你会在detail box看到Xdebug

      【讨论】:

      • 在发帖时,解决方法是前者。展望未来,这应该是公认的答案,也是人们追随的答案。
      【解决方案6】:

      如果你在 vagrant box 中运行 phpunit,那么你不需要在本地安装 xdebug,而 homestead 会自动安装 xdebug。只需要链接homestead xdebug.ini 文件

      这是对我有用的步骤:

      cd ~/homestead/REPLACE THIS WITH YOUR HOMESTEAD FOLDER IN LOCAL //
      vagrant ssh
      
      sudo ln -s /etc/php/7.2/fpm/conf.d/20-xdebug.ini /etc/php/7.2/cli/conf.d/
      

      在上面的命令中如果你运行7.37.1 然后根据你的php版本替换它

      【讨论】:

        【解决方案7】:

        它对我有用。按照这个步骤:

        1.) 安装 php7.x-dev,(x) 是你 Linux 服务器上的 PHP 版本

        sudo apt-get install php7.x-dev
        

        2.) 在 Linux 上通过 PECL 安装 Xdebug

        sudo pecl install xdebug
        

        3.) 添加以下 php.ini 文件。 (你可以在最后一行插入)

        zend_extension="/wherever/you/put/it/xdebug.so"
        

        【讨论】:

        • 请不要只发布代码作为答案,还要说明您的代码的作用以及它如何解决问题的问题。带有解释的答案通常质量更高,更有可能吸引投票。
        • 虽然这可能会回答问题,但它已被标记为待审核。没有解释的答案通常被认为是低质量的。请在答案中提供一些评论,说明为什么这是正确答案。
        • 好的,感谢您的反馈,我已经在我的回答中添加了一些信息
        【解决方案8】:

        要复制,请按照以下解决方案进行操作;

        1. 如果您没有已激活 Xdebug,则重现该行为的步骤:

          • 在您的项目根目录中打开您的 CMD 终端并输入 php -i
          • 关于您的 php重要信息列表将在 CMD 终端中列出
          • 在此处复制并粘贴输出https://xdebug.org/wizard
          • 粘贴输出后,点击按钮Analyse my phpinfo() output继续
          • 在您重定向到摘要页面后,按照说明到后者
          • 安装完成后,输入php -v,确认Xdebug激活成功。
        2. 如果您已经激活了 Xdebug,请按照以下步骤运行测试覆盖率

          • 在 CMD 终端中输入./vendor/bin/phpunit --coverage-html tests/coverage 以生成测试覆盖率
          • 成功运行测试后,测试的覆盖率报告将在 project_dir/tests/coverage 目录中
          • project_dir/tests/coverage 目录中,点击 index.html 文件打开并查看项目的总体报告phpunit 测试覆盖率

        注意: 我曾在 Laravel ^6.0
        在 Windows 10 环境中测试,但可以在其他环境中复制

        【讨论】:

          【解决方案9】:

          我有 PHP 7.1.33、Centos 7、PHPUnit 5.7.27 这对我有用

          $ yum install gcc
          $ pecl install xdebug-2.9.0
          Build process completed successfully
          Installing '/usr/lib64/php/modules/xdebug.so'
          install ok: channel://pecl.php.net/xdebug-2.9.0
          configuration option "php_ini" is not set to php.ini location
          You should add "zend_extension=/usr/lib64/php/modules/xdebug.so" to php.ini
          

          之后继续 查找 php.ini 文件的位置

          $ php -i | grep 'Configuration File'
          Configuration File (php.ini) Path => /etc
          Loaded Configuration File => /etc/php.ini
          

          添加 Xdebug 配置

          $ vi /etc/php.ini
          

          在最后加上这个

          zend_extension=/usr/lib64/php/modules/xdebug.so
          

          检查是否安装了 Xdebug

          $ php -ini|grep 'xdebug support'
          xdebug support => enabled
          

          【讨论】:

            猜你喜欢
            • 2021-01-30
            • 1970-01-01
            • 2018-03-01
            • 2013-05-07
            • 2016-09-13
            • 2020-03-11
            • 2019-07-22
            • 2018-05-20
            • 2012-05-04
            相关资源
            最近更新 更多