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
,即使它應該由環境變量覆蓋上面。
這是怎麼回事?
也許配置緩存?如果存在,嘗試刪除'/ bootstrap/cache/config.php'。如果你設置'.env'文件這個數據庫 –
會發生什麼?也許'phpunit.xml'中的配置沒有被使用?你是手動運行這個測試,還是通過一些CI來運行例如Jenkins? –
這可能是因爲你'DB_CONNECTION'在shell環境設置。 PHPUnit默認不會覆蓋這些變量,但您可以強制覆蓋它們https://stackoverflow.com/a/43717277/4233593 –