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” 的問題