我在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
是唯一的选择。