PHPUnit的:无法打开文件“FILENAME.php”自引导

问题描述:

运行时,我创建了错误的服务器一个新的作曲家的项目,我有以下目录结构:PHPUnit的:无法打开文件“FILENAME.php”自引导

PROJNAME (dir) 
    --PROJNAME.php (my project file) 
    tests (dir) 
    --PROJNAMETest.php 

我已经运行下面的命令它的工作原理错误的服务器上:

vendor/bin/phpunit --bootstrap PROJNAME.php --testdox tests/ 

但文件移动到正确的服务器(使用scp -r,删除供应商目录,并做作曲家安装)后,我得到错误:

Cannot open file "PROJNAME.php". 

但是,当我运行时没有--bootstrap PROJNAME.php,它的工作原理没有错误!我不明白这一点。

如下PROJNAME.php的内容:

<?php 

require 'vendor/autoload.php'; 


function DummyMethod(){ 
} 
?> 

和文件测试/ PROJNAMETest.php:

<?php 

require 'vendor/autoload.php'; 

use PHPUnit\Framework\TestCase; 

final class PROJNAMETest extends TestCase 
{ 

public function testDummyMethod() 
{ 
$this->assertEquals(true, true); 
} 
} 

我也指出,文件权限看起来一样在两台机器上:

-rw-r--r-- 1 root root 69 Aug 9 21:07 PROJNAME.php 

由于我与root用户工作,我没有看到权限尽可能的原因。

请指教可能导致这种情况的原因...

谢谢!

+0

“错误”的服务器? – hakre

I get error:

Cannot open file "PROJNAME.php". 

However when I am running without --bootstrap PROJNAME.php, it works without errors! I don't understand this.

错误消息 “无法打开文件...” 是意图。

Cannot open bootstrap file ...

bootstrap file加载之前几乎PHPUnit的测试套件(S)一切,它是建立在裸最小的项目设置进行测试:作为可读取的消息。该错误仅表明引导程序文件无法打开。

请记住,您使用的是引导文件的相对路径,因此您需要注意与测试运行器的(调用)工作目录结合可以解析为正确的(可读的)引导文件。除非没有,否则你会看到这个错误。这个错误是由btw打算的,不能打开引导文件是你想知道的。

只需登录到正确的服务器,切换到引导程序文件的目录并在该目录中执行testsuite。它应该工作(除非文件不能作为文件系统中的用户自己打开)。

要克服系统差异,请创建一个phpunit.xml.dist)文件,该文件具有引导文件的属性并使用该配置文件执行测试套件。将其置于版本控制之下,以便以更加定义和稳定的方式管理配置和设置。

但首先找出文件无法打开的原因。

+0

那么,今天我重新连接到开发服务器,它只是工作,没有这样的错误了!我不能告诉为什么..也许重新登录服务器已经设置了一些env变量,我不知道... @hakre:请你至少解释引导“PROJNAME.php”,并没有引导运行之间的区别?我正在使用它来确保文件在测试用例运行之前被加载......是否真的需要?之后,我会接受你的答案作为我猜的解决方案:) – Carmageddon

+0

将引导程序看作包含在测试套件运行之前的PHP包含文件。这允许您设置PHP环境,如您认为合适的,例如初始化自动加载器等。如果您不需要引导程序文件(您的测试套件无需工作),那么您就不需要使用它。如果你不需要,不要使用它,所以你可以在需要的时候使用它。) - 一个常见的用例是基于composer的项目使用'vendor/autoload.php'文件作为引导。 – hakre