2017-10-07 87 views
1

Laravel v5.5.14
PHPUnit的v6.4.1Laravel測試 - 遷移/刷新錯誤的環境

我有一些特性測試一個Laravel應用。我基地TestCase使用RefreshDatabase的特質對每個測試之前觸發DB刷新,並在我的phpunit.xml的ENV變量看起來像這樣;

<php> 
    <env name="APP_ENV" value="testing"/> 
    <env name="DB_CONNECTION" value="sqlite"/> 
    <env name="DB_DATABASE" value=":memory:"/> 
    <env name="CACHE_DRIVER" value="array"/> 
    <env name="SESSION_DRIVER" value="array"/> 
    <env name="QUEUE_DRIVER" value="sync"/> 
</php> 

的意圖是獨自離開發展mysql DB連接並運行在內存使用SQLite的測試。儘管這些設置(與清算緩存的配置等),數據庫刷新始終刷新mysql連接DB。

我查看了RefreshDatabase中的功能並調試了refreshDatabase方法,

$this->usingInMemoryDatabase() 
         ? $this->refreshInMemoryDatabase() 
         : $this->refreshTestDatabase(); 

而且usingInMemoryDatabase始終返回false。縱觀該方法的內容,從config檢索DB_CONNECTION時,它總是返回mysql,即使它應該由環境變量覆蓋上面。

這是怎麼回事?

+0

也許配置緩存?如果存在,嘗試刪除'/ bootstrap/cache/config.php'。如果你設置'.env'文件這個數據庫 –

+0

會發生什麼?也許'phpunit.xml'中的配置沒有被使用?你是手動運行這個測試,還是通過一些CI來運行例如Jenkins? –

+0

這可能是因爲你'DB_CONNECTION'在shell環境設置。 PHPUnit默認不會覆蓋這些變量,但您可以強制覆蓋它們https://stackoverflow.com/a/43717277/4233593 –

回答

0

運行php artisan config:clear之前運行測試,以清除緩存,以確保配置變量不是從錯誤的環境緩存。如果不使用IDE(例如PHPStorm)幫助運行PHPUnit的具體選擇項目phpunir.xml

enter image description here