2017-08-10 52 views
2

運行時,我創建了錯誤的服務器一個新的作曲家的項目,我有以下目錄結構: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

回答

0

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