Laravel 5: PHPUnit 且没有可用的代码覆盖驱动程序
Laravel 5: PHPUnit and no code coverage driver available
我想使用 PHPUnit 来创建代码覆盖率报告。我尝试了很多在网上找到的安装设置。但似乎没有任何结果。
我使用最新版本的 Laravel 5 (>5.2) 和 PHPUnit v. 5.0.10。此外,我在 Mac OS X 10.9.5 运行ning PHP 7.
上使用 MAMP
当我 运行 PHP 集成在我的 Laravel 发行版中的单元时,我收到以下错误。
$ 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与代码覆盖一起使用?我应该如何设置和使用它?
非常感谢您的帮助。
您似乎缺少 Xdebug 扩展。如果您使用的是自制软件,则可以像这样安装它:
brew install php70-xdebug
之后,不要忘记编辑 php.ini 文件以启用扩展程序。
php -i | grep xdebug
检查 xdebug 是否启用后,您应该可以进行代码覆盖
PHP7.1
更新
xdebug 对于代码查找和覆盖率是必不可少的,因此必须在测试环境中安装或启用 xdebug。生产环境中的xdebug是不建议的,打开会影响性能
brew install php71-xdebug
为其他卡住的人更新;
pecl install xdebug
正如其他开发者所回答的那样,您需要安装 PHP Xdebug 但我想为默认使用 homestead 的开发者添加新的建议有 Xdebug(但它是关闭的)并且您可以将其打开或关闭
如果你想在 homestead 中使用下面的命令
#for on :
xon
#for off:
xoff
然后勾选php -v
你会在详细信息框中看到Xdebug
windows 用户:
1) 下载xdebug
2) 将文件重命名为 _php_xdebug.dll_ 并将文件复制到 php 安装中的 ext 文件夹,例如 C: \Program 文件 (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 在一个 vagrant box 中,那么您不需要在本地安装 xdebug,homestead 会自动安装 xdebug。只需要link宅基地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/
在上面的命令中,如果你的 运行ning 7.3
或 7.1
然后根据你的 php 版本替换它
To Reproduce, kindly follow the solution(s) below;
如果您没有已激活 Xdebug,则重现该行为的步骤:
- 在您的项目根目录中打开您的 CMD 终端并输入
php -i
- 关于您的php的重要信息列表在 CMD 终端
- 将输出复制并粘贴到此处https://xdebug.org/wizard
- 粘贴输出后,单击按钮 分析我的 phpinfo() 输出 以继续
- 在重定向到摘要页面
后,按照说明进入后者
- 完成安装后,键入
php -v
以确认 Xdebug 已成功激活。
如果您已经激活了 Xdebug,请按照以下步骤获取 测试覆盖率 运行;
- 在 CMD 终端中输入
./vendor/bin/phpunit --coverage-html tests/coverage
以生成 测试覆盖率
- 成功完成 运行 测试后,测试的覆盖率报告将在 project_dir/tests/coverage目录
- 在 project_dir/tests/coverage 目录中,单击 index.html 文件以打开并查看项目 php 单元测试覆盖率
的一般报告
NB:
I worked in Laravel ^6.0
Tested in Windows 10 environment but can be replicated in other environments
它对我有用。按照此步骤操作:
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"
我有
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
我想使用 PHPUnit 来创建代码覆盖率报告。我尝试了很多在网上找到的安装设置。但似乎没有任何结果。
我使用最新版本的 Laravel 5 (>5.2) 和 PHPUnit v. 5.0.10。此外,我在 Mac OS X 10.9.5 运行ning PHP 7.
上使用 MAMP当我 运行 PHP 集成在我的 Laravel 发行版中的单元时,我收到以下错误。
$ 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与代码覆盖一起使用?我应该如何设置和使用它?
非常感谢您的帮助。
您似乎缺少 Xdebug 扩展。如果您使用的是自制软件,则可以像这样安装它:
brew install php70-xdebug
之后,不要忘记编辑 php.ini 文件以启用扩展程序。
php -i | grep xdebug
检查 xdebug 是否启用后,您应该可以进行代码覆盖
PHP7.1
更新xdebug 对于代码查找和覆盖率是必不可少的,因此必须在测试环境中安装或启用 xdebug。生产环境中的xdebug是不建议的,打开会影响性能
brew install php71-xdebug
为其他卡住的人更新;
pecl install xdebug
正如其他开发者所回答的那样,您需要安装 PHP Xdebug 但我想为默认使用 homestead 的开发者添加新的建议有 Xdebug(但它是关闭的)并且您可以将其打开或关闭
如果你想在 homestead 中使用下面的命令
#for on :
xon
#for off:
xoff
然后勾选php -v
你会在详细信息框中看到Xdebug
windows 用户:
1) 下载xdebug
2) 将文件重命名为 _php_xdebug.dll_ 并将文件复制到 php 安装中的 ext 文件夹,例如 C: \Program 文件 (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 在一个 vagrant box 中,那么您不需要在本地安装 xdebug,homestead 会自动安装 xdebug。只需要link宅基地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/
在上面的命令中,如果你的 运行ning 7.3
或 7.1
然后根据你的 php 版本替换它
To Reproduce, kindly follow the solution(s) below;
如果您没有已激活 Xdebug,则重现该行为的步骤:
- 在您的项目根目录中打开您的 CMD 终端并输入
php -i
- 关于您的php的重要信息列表在 CMD 终端
- 将输出复制并粘贴到此处https://xdebug.org/wizard
- 粘贴输出后,单击按钮 分析我的 phpinfo() 输出 以继续
- 在重定向到摘要页面 后,按照说明进入后者
- 完成安装后,键入
php -v
以确认 Xdebug 已成功激活。
- 在您的项目根目录中打开您的 CMD 终端并输入
如果您已经激活了 Xdebug,请按照以下步骤获取 测试覆盖率 运行;
- 在 CMD 终端中输入
./vendor/bin/phpunit --coverage-html tests/coverage
以生成 测试覆盖率 - 成功完成 运行 测试后,测试的覆盖率报告将在 project_dir/tests/coverage目录
- 在 project_dir/tests/coverage 目录中,单击 index.html 文件以打开并查看项目 php 单元测试覆盖率 的一般报告
- 在 CMD 终端中输入
NB: I worked in Laravel ^6.0
Tested in Windows 10 environment but can be replicated in other environments
它对我有用。按照此步骤操作:
1.) 安装 php7.x-dev,(x) 是您 Linux 服务器上的 PHP 版本
sudo apt-get install php7.x-dev
2.) 在 Linux
上通过 PECL 安装 Xdebugsudo 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