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

时间:2016-03-05 07:43:10

标签: 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`

我的作曲家文件如下:

"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与代码覆盖一起使用?我应该如何设置并使用它?

非常感谢你的帮助。

8 个答案:

答案 0 :(得分:68)

您似乎错过了Xdebug扩展程序。如果您使用自制软件,可以像以下一样安装:

brew install php70-xdebug

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

php -i | grep xdebug

检查xdebug是否已启用后,您应该可以进行代码覆盖

答案 1 :(得分:10)

更新其他任何人;

pecl install xdebug

答案 2 :(得分:5)

PHP 7.1的更新

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

会影响性能

brew install php71-xdebug

答案 3 :(得分: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

答案 4 :(得分:2)

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

如果要在宅基地中使用以下命令

#for on :
xon

#for off:
xoff

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

答案 5 :(得分:1)

如果您在无业游民的盒子中运行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版本替换它

答案 6 :(得分:1)

要复制,请遵循以下解决方案;

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

    • 在项目根目录中,打开CMD终端并输入php -i
    • 与您的 php 有关的 重要信息 列表将在CMD终端中列出
    • 将输出复制并粘贴到https://xdebug.org/wizard
    • 粘贴输出后,单击按钮分析我的phpinfo()输出以继续
    • 重定向到摘要页面
    • 后,请遵循说明
    • 安装完成后,键入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环境中进行了测试,但可以在其他环境中复制

答案 7 :(得分:1)

对我有用。请按照以下步骤操作:

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

x   y   z
a   1   M 
b   2   M 
c   3   M 
a   1   N 
b   2   N 
c   3   N

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

sudo apt-get install php7.x-dev

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

sudo pecl install xdebug