簡介
Laravel 內建了各種能安全又快速驗證使用資料庫功能的機制。結合資料庫重置 trait、模型工廠、Seeder 與專屬斷言,你可以寫出不易損壞的測試。 首要建議是使用RefreshDatabase。在多數情況下,它比完整重置更能兼顧測試獨立性與速度。
每次測試後重置資料庫
為避免前一個測試的資料影響下一個測試,可使用 Laravel 的資料庫重置 trait。RefreshDatabase 會判斷 schema 是否為最新。若為最新則以 transaction 執行測試,否則會先執行 migration。
若不想使用 transaction 方式,希望每次徹底重置時,可使用下列 trait。
模型工廠
在測試前準備資料,可以用模型工廠簡潔地建立 Eloquent 模型。 Factory 定義、state、關聯的細節請參考 Eloquent 工廠。執行 Seeder
若想在測試中匯入資料,可使用seed()。無參數時執行 DatabaseSeeder,有參數時可執行特定 Seeder(或陣列)。
RefreshDatabase 的所有測試每次都自動 seed,可為基底 TestCase 加上 #[Seed] 屬性。
#[Seeder(...)]。