Laravel 測試環境使用 in Memory DB - SQLite
在執行 phpunit 時,透過 sqlite 可以快速的執行測試,而避免掉需要建立關聯資料庫的流程
在 Laravel 設置方式如下
設置 .env.testing
將資料庫連線設定為 sqlite,以及
DB_CONNECTION=sqlite
DB_HOST=localhost
DB_PORT=8000
DB_DATABASE=':memory:'
配置 phpunit.xml
將 phpunit.xml 裡的 php 配置更改為以下內容:
<php>
<env name="DB_DATABASE" value="database/database.sqlite"/>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="sqlite"/>
</php>
設置 database
開啟 config/database.php
將 sqlite 配置修改如下:
'sqlite' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
以上配置完成,即可在測試時使用 sqlite 來執行
備註: 在執行過程請在 test 檔案使用 use RefreshDatabase; 以避免發生 “no such table” 的問題