在之前的文章中,我們分別演練了 API 測試與資料庫測試,今天則讓我們停下腳步,來介紹一些 Laravel 提供的,與 自動化測試有關的 Trait 吧!
當我們使用了這個 Trait 後,會在每個測試被執行前,先執行 migrate
,接著在測試被執行後,會再執行 migrate:rollback
,這樣可以達成讓每一個測試被執行時,都有一個全新的空資料庫的效果。
這個 Trait ,會在每個測試被執行前,啟動資料庫的 Transaction
機制,接著在測試被執行後,會進行 Rollback
的動作,以達到類似重置資料庫的效果。
這個應該是最常用到的自動化測試 Trait 了,它可以說是 DatabaseMigrations
與 DatabaseTransactions
的綜合體。使用它以後,它會判斷目前所使用的測試資料,是否為 In-memory 的形式,如果是,那就會執行 migrate
;如果不是,則會在每一次測試執行前,先判斷是否執行過 migrate
,如還未執行則執行之,如已執行,啟動資料庫的 Transaction
機制。
與 DatabaseMigrations
比較大的區別是,DatabaseMigrations
會讓 auto-generated ID 歸零,RefreshDatabase
則不會。
有時我們要測試的功能,剛好會經過 Middleware
,而有時要讓測試能正常的通過 Middleware
,可能需要做一些準備,例如手動產製 Bearer Token 放入 Header ,以便過 auth
這個 Middleware
。
然而有時 Middleware
的邏輯,未必是此時我們想要測的目標,此時就可以使用這個 Trait ,讓我們在執行測試時,可以略過 Middleware
層,以便我們專注於我們想要測試的對象及其行為。
有時當我們不想在測試執行時,觸發各種 Event 時,便可使用這個 Triat ,不過筆者實務上不曾使用過。
還記得前一天在使用 factory
時,有個神秘的 $faker
嗎?這個 Trait 可以讓我們在測試程式碼中,也可以隨心所欲地產生假資料值。
以上就是今天要為大家介紹的幾個 Trait,建議大家可以自行實作幾個案例來用看看唷!(不過與資料庫相關的 Trait,如果初期還不熟的話,建議拿空的資料庫來做測試喔)
下一篇我們來討論 Auth 測試!
如果您喜歡這篇文章,歡迎加入追蹤以接收新文章通知 😄