2013-12-17 66 views
-1

我正在將laravel 3站點升級到laravel 4,並且在我去的時候爲它編寫單元測試。這個工作很好,我在大約20個測試用例中已經進行了大約300次測試,並且每個測試都能夠單獨運行。直到最近,他們都工作正常運行起來,但我似乎已經越過某個閾值,我不能沒有下面的錯誤運行一氣呵成任何測試:如果太多,Laravel測試失敗

PHP Fatal error: Illuminate\Filesystem\Filesystem::getRequire(): Failed opening required '/Users/Me/Desktop/Repos/API-2/app/config/api.php' (include_path='.:/Applications/MAMP/bin/php/php5.4.4/lib/php') in /Users/Me/Desktop/Repos/API-2/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php on line 53 

它未能包括的配置文件幾乎在每一個單獨的測試中都會用到,而且當所有的測試用例單獨運行時都能正常工作,所以我不明白爲什麼只有當它們全部一起運行時纔會發生這種錯誤。

這個錯誤顯示當測試接近完成時,所以我的第一個雖然是內存或執行時間限制,我試過在php.ini中加倍這些,但我不認爲它們適用於CLI?我不確定還有什麼可能導致這樣的問題,只有當所有這些問題一起運行時纔會發生這種問題?

編輯

難道沒有人知道什麼可能會造成這個? 目前我可以立即運行所有測試做的最好的是下面的bash腳本,然後滾動雖然結果查找錯誤的網頁...

#!/bin/bash 
for f in app/tests/*Test.php ; do phpunit "$f" ; done 
+0

您是否嘗試過使用'--process-isolation'選項? http://phpunit.de/manual/3.7/en/textui.h​​tml – SamV

+0

我假設我只是執行'phpunit --process-isolation'?我不知道是否我做錯了,因爲每次測試失敗時,我都這樣做:/'已定義常量LARAVEL_START' –

+0

在項目目錄中編輯'phpunit.xml'並將值設置爲'true' 。 – SamV

回答

2

假設這是Unix和Linux的系統上,這聽起來很像ulimit問題(打開文件限制)。

檢查ulimit -nulimit -Hn的輸出分別爲軟限制和硬限制打開文件限制。如果它是可笑的小東西,比如1024,那麼你可能會想要它。

參見:How do I change the number of open files limit in Linux?

另外要注意的是,這些限制是每個用戶,不是全球性的,所以一定要運行此爲運行單元測試的用戶。

編輯:由errant.info的答案在這裏修復:https://superuser.com/questions/302754/increase-the-maximum-number-of-open-file-descriptors-in-snow-leopard,因爲MacOSX是...特別的。

+0

感謝Tasos,這是在Mac上,但是當我運行'ulimit -n'和'ulimit -Hn'他們都返回'無限',所以看起來這不是不幸的問題? –

+0

只需仔細檢查一下,你是否將此作爲Malk運行 - 與運行單元測試的用戶相同? –

+0

我想我找到了別的東西。 MacOSX是...特別的。在我的,(10.6/64bit)'ulimit -n'說2560,而'launchctl limit maxfiles'說256 |無限制。不知道它是哪一個服從,但值得一試。這確實聽起來像是一個開放的文件限制。你能檢查:'launchctl limit'的輸出嗎?查找maxfiles行,如果它們不是無限制的,則使用'launchctl limit maxfiles unlimited unlimited'設置(或者如果它不允許你這樣做,則爲高值) –