Laravel 5:PHPUnit并且没有可用的代码覆盖驱动程序

LaD*_*ude 58 phpunit code-coverage laravel-5.2

我想使用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`
Run Code Online (Sandbox Code Playgroud)

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

"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.*"
},
Run Code Online (Sandbox Code Playgroud)

我也尝试了以下命令:

/Applications/MAMP/bin/php/php7.0.0/bin/phpdbg -qrr ../../../htdocs/myProject/vendor/bin/phpunit -v
Run Code Online (Sandbox Code Playgroud)

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

$ /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:
...
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

是否可以使用Laravel框架附带的PHPUnit和代码覆盖?我该如何设置并使用它?

非常感谢你的帮助.

Nen*_*nad 76

好像你错过了Xdebug扩展.如果你使用的是自制软件,你可以安装它:

brew install php70-xdebug
Run Code Online (Sandbox Code Playgroud)

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

php -i | grep xdebug
Run Code Online (Sandbox Code Playgroud)

检查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到哪里了?我在我的系统上找不到它. (2认同)
  • 它现在有效.我使用了自制软件安装的xdebug应用程序.我实际编辑了错误的php.ini文件,该文件位于`/ Applications/MAMP/conf/php7.0.0`中.在编辑了位于`/ Applications/MAMP/bin/php/php7.0.0/conf`的正确php.ini文件并重新启动MAMP Web服务器后,phpunit现在运行代码覆盖.谢谢你的帮助. (2认同)

Rob*_*der 12

更新任何其他人卡住;

pecl install xdebug

  • 你应该添加“sudo pecl install xdebug”。安装此命令。 (2认同)

Maz*_*kah 7

对于 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
Run Code Online (Sandbox Code Playgroud)

  • 还需要添加 - xdebug.mode=coverage (2认同)

nur*_*zin 7

这对我有用。请按照此步骤操作:

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

sudo apt-get install php7.x-dev
Run Code Online (Sandbox Code Playgroud)

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

sudo pecl install xdebug
Run Code Online (Sandbox Code Playgroud)

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

zend_extension="/wherever/you/put/it/xdebug.so"
Run Code Online (Sandbox Code Playgroud)

  • 请不要仅发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带解释的答案通常质量更高,更有可能吸引点赞。 (5认同)

Sur*_*amy 6

PHP 7.1的更新

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

brew install php71-xdebug


Mhm*_*hmd 5

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

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

#for on :
xon

#for off:
xoff
Run Code Online (Sandbox Code Playgroud)

然后检查php -v,您将在详细信息框中看到 Xdebug