通过PECL安装Xdebug后,不带参数运行phpunit会生成关于权限的警告


Running phpunit with no arguments after installing Xdebug via PECL generates warnings about permissions

我在Ubuntu 10.04上运行Zend Framework 1.10,只是安装了Xdebug来生成代码覆盖,通过PECL。

如果我这样运行phpunit:

$ phpunit --coverage-html ~/coverage

它工作得很好。运行单元测试,然后生成代码覆盖率输出。无错误信息或警告。

但是如果我这样做了:

$ phpunit

测试运行良好,但是当代码覆盖开始时,我得到这个:

Generating code coverage report, this may take a moment.PHP Warning:  mkdir(): Permission denied in /usr/share/php/PHPUnit/Util/Filesystem.php on line 209
PHP Stack trace:
PHP   1. {main}() /usr/bin/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52
PHP   3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:147
PHP   4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:214
PHP   5. PHPUnit_Util_Report::render() /usr/share/php/PHPUnit/TextUI/TestRunner.php:479
PHP   6. PHPUnit_Util_Filesystem::getDirectory() /usr/share/php/PHPUnit/Util/Report.php:87
PHP   7. mkdir() /usr/share/php/PHPUnit/Util/Filesystem.php:209
Warning: mkdir(): Permission denied in /usr/share/php/PHPUnit/Util/Filesystem.php on line 209
Call Stack:
    0.0003     322324   1. {main}() /usr/bin/phpunit:0
    0.0521    4658252   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52
    0.0521    4658716   3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:147
    0.5944   12773356   4. PHPUnit_TextUI_TestRunner->doRun() /usr/share/php/PHPUnit/TextUI/Command.php:214
   37.1550   24746768   5. PHPUnit_Util_Report::render() /usr/share/php/PHPUnit/TextUI/TestRunner.php:479
   37.1550   24746768   6. PHPUnit_Util_Filesystem::getDirectory() /usr/share/php/PHPUnit/Util/Report.php:87
   37.1560   24746984   7. mkdir() /usr/share/php/PHPUnit/Util/Filesystem.php:209

在我安装Xdebug之前,运行不带任何参数的phpunit工作得很好。

我认为这只是一个愚蠢的权限问题,源于我的PECL安装Xdebug,但它看起来像/usr/share/php/phpunit中的所有内容都应该作为root权限,所以…什么好主意吗?

错误消息只是告诉您mkdir不能在某处创建文件夹,但不是在它试图这样做的地方。

我假设您有一个phpunit.xml.dist,其中coverage-html类型的<logger>定义了一个目标,该目标在您的机器上不存在,您的当前用户也没有写访问权限。

PHPUnit不会尝试在没有人告诉它做的情况下生成覆盖率报告,如果你不在cli上做phpunit.xml是唯一的选择。