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

我想使用 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:
...

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 以及代码覆盖率?我应该如何设置和使用它?

非常感谢你的帮助。

80304 次浏览

看起来你好像错过了 Xdebug 扩展,如果你正在使用自制程序,你可以这样安装它:

brew install php70-xdebug

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

php -i | grep xdebug

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

PHP 7.1的更新

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

brew install php71-xdebug

为其他卡住的人更新;

pecl install xdebug

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

如果你想让它在使用下面的命令在家园

#for on :
xon


#for off:
xoff

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

对于 windows 用户:

1)下载 Xdebug

2)将文件重命名为 _ php _ xdebug. dll _,并将该文件复制到 php 安装中的 下集预告文件夹,例如 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

如果你在一个流浪的盒子里运行 phPunit,那么你就不需要在本地安装 xdebug 了,并且自动安装 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 版本替换它

要复制,请按照下面的解决方案;

  1. 如果 不要已经激活了 Xdebug,则重现该行为的步骤:

    • 在项目根目录中打开 CMD 终端并键入 php -i
    • 关于您的 我不知道重要资料列表将在 CMD 终端中列出
    • 复制并粘贴输出到 https://xdebug.org/wizard
    • 粘贴输出后,单击按钮 分析我的 phpinfo ()输出继续
    • 在重定向到 摘要页之后,按照 指示到后者
    • 安装完成后,键入 php -v以确认 Xdebug 已成功激活。
  2. 如果您已经激活了 Xdebug,请按照以下步骤运行 测试覆盖范围;

    • 在 CMD 终端中输入 ./vendor/bin/phpunit --coverage-html tests/coverage以生成 测试覆盖范围
    • 成功运行测试之后,测试的覆盖率报告将在 < em > project _ dir/test/cover 目录中
    • < em > project _ dir/test/cover 目录中,单击 Html文件打开并查看项目 phPunit 测试覆盖率的一般报告

注意: 我在 Laravel ^ 6.0工作过
在 Windows10环境中测试,但可以在其他环境中复制

这招对我很管用,按照下面的步骤:

1.) install php7.x-dev,(x) is PHP version on your Linux server

sudo apt-get install php7.x-dev

在 Linux 上通过 PECL 安装 Xdebug

sudo pecl install xdebug

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

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

我有 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