【发布时间】:2021-01-30 18:14:59
【问题描述】:
我有一个 laravel 项目,我尝试运行 phpunit 给我一份覆盖率报告。我运行了命令vendor/bin/phpunit --coverage-html storage/test-output-data/coverage-html,它给出了输出:
PHPUnit 8.5.8 by Sebastian Bergmann and contributors.
Error: No code coverage driver is available
我尝试通过sudo pecl install pcov 解决这种情况,但运行 phpunit 仍然出现上述相同的错误。
我注意到我有文件/usr/lib/php/20170718/pcov.so。所以我将extension=/usr/lib/php/20170718/pcov.so 行添加到我的/etc/php/7.4/cli/php.ini 文件中。但是当我输入php -v 时,我得到了这个错误:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20170718/pcov.so' (tried: /usr/lib/php/20170718/pcov.so (/usr/lib/php/20170718/pcov.so: undefined symbol: _zval_ptr_dtor), /usr/lib/php/20190902//usr/lib/php/20170718/pcov.so.so (/usr/lib/php/20190902//usr/lib/php/20170718/pcov.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.4.11 (cli) (built: Oct 10 2020 19:44:50) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies
我还有一个名为 /usr/lib/php/20190902 的文件夹,但它没有 pcov.so 文件。
我也尝试过sudo pecl install xdebug,但我遇到了与上面类似的错误,其中 phpunit 说没有驱动程序,输入 php -v 说缺少类似于 pcov 问题的一些全局变量。
我做错了什么?
【问题讨论】:
-
/usr/lib/php/20170718/pcov.so-- 这是针对 PHP v7.2 的(基于20170718部分),当您尝试在 PHP 7.4 中使用它时乙>。是的 - 只需为您的 PHP 7.4 获取正确版本的 Xdebug 或 PCOV(P.S. 对于 PHP 7.4,API 版本将是20190902) -
试试这个解决方案,通过 PECL 为特定 PHP 版本(7.4 而不是当前的 7.2)“切换”/安装扩展:stackoverflow.com/a/54594604/783119
-
@lazyone 谢谢你,为我做一个
sudo pecl -d php_suffix=7.4 install pcov正确安装的pcov。现在 PHPUnit 能够生成覆盖率报告了。