Skip to main content

簡介

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,可使用 #[Seeder(...)]

可用的斷言

Laravel 提供多種可在 Pest / PHPUnit 中共用的資料庫專屬斷言。

assertDatabaseCount

確認資料表中的紀錄筆數與預期一致。

assertDatabaseEmpty

確認資料表為空。

assertDatabaseHas

確認存在符合指定條件的紀錄。

assertDatabaseMissing

確認不存在符合指定條件的紀錄。

assertSoftDeleted

確認目標 Eloquent 模型已被軟刪除。

assertNotSoftDeleted

確認目標 Eloquent 模型尚未被軟刪除。

assertModelExists

確認指定模型(或模型集合)在 DB 中存在。

assertModelMissing

確認指定模型(或模型集合)在 DB 中不存在。

expectsDatabaseQueryCount

於測試開頭嚴格指定所執行的資料庫查詢總數。若實際執行次數與預期不符則失敗。
最後修改於 2026年8月2日