PHPUnit从不使用正确的include_path

时间:2013-04-02 21:05:39

标签: phpunit

我最近在Mac上安装了PHPUnit(10.8.3)(运行PHP 5.4.7)。例如,当我尝试运行测试phpunit testfile.php时,我会收到:

Warning: require_once(File/Iterator/Autoload.php): failed to open stream: No such file or
directory in /Users/myusername/pear/share/pear/PHPUnit/Autoload.php on line 64

Fatal error: require_once(): Failed opening required 'File/Iterator/Autoload.php' 
(include_path='.:') in /Users/myusername/pear/share/pear/PHPUnit/Autoload.php on line 64

文件/Users/myusername/pear/share/pear/File/Iterator/Autoload.php存在。

php.ini正确列出了包含路径中的pear目录:

.:/php/includes:/usr/local/apache/lib/php:/Users/myusername/pear/share/pear/

然而,当我在var_dump(get_include_path());文件中PHPUnit/Autoload.php时,它会打印.:,就好像它是空的一样。

转而使用php_ini_loaded_file的价值,只需返回false

使用php -i |grep php\.iniphp --ini只显示正在使用/加载的一个php.ini:

Configuration File (php.ini) Path => /usr/local/apache/lib
Loaded Configuration File => /usr/local/apache/lib/php.ini

我从命令行运行的一个简单的test.php文件中重复了include_path和loaded_ini_file的var_dumps,并打印出正确的信息。所以涉及phpunit的东西没有加载右/任何php.ini。

我没有使用任何与默认配置不同的配置 - 今天就在这台机器上安装了phpunit。

2 个答案:

答案 0 :(得分:1)

确保您使用的php.ini文件是为cli php加载的文件。至少在我在Linux上安装PHP时,我有两个php.ini文件,一个在/etc/php/cgi-php5.4/php.ini,另一个在/etc/php/cli-php5.4/ php.ini中。如果更改cgi版本,则默认情况下不会影响cli版本,并且会导致include路径为空。


另一个要检查的地方是phpunit.xml文件。它有一个部分来指定包含路径。 See here可用选项。我不确定为什么phpunit会重置路径,但这可能是解决问题的一种方法。

答案 1 :(得分:0)

解决方案是:

运行后

`pear config-get php_bin` -i | grep -E Configuration\ File\|include_path

它表明Pear使用的是与php-cli不同的ini路径:

Configuration File (php.ini) Path => /etc
Loaded Configuration File => (none)
include_path => .: => .:

事实证明,Pear已经由PHP的原始/默认Mac OS副本配置,而不是我之后安装的自定义版本。

可能不是长期最佳的快速解决方法是对它试图找到的ini文件进行符号链接:

sudo ln -s /usr/local/apache/lib/php.ini /etc/php.ini

之后,phpunit FakeTest命令正常运行,测试运行。

最终我需要重新安装/重新配置Pear才能使用我加载的php版本。