2023-12-18|閱讀時間 ‧ 約 25 分鐘

PHPUnit 自動化測試大作戰【CH09】

在之前的文章中,我們分別演練了 API 測試與資料庫測試,今天則讓我們停下腳步,來介紹一些 Laravel 提供的,與 自動化測試有關的 Trait 吧!

DatabaseMigrations

當我們使用了這個 Trait 後,會在每個測試被執行前,先執行 migrate ,接著在測試被執行後,會再執行 migrate:rollback ,這樣可以達成讓每一個測試被執行時,都有一個全新的空資料庫的效果。

DatabaseTransactions

這個 Trait ,會在每個測試被執行前,啟動資料庫的 Transaction 機制,接著在測試被執行後,會進行 Rollback 的動作,以達到類似重置資料庫的效果。

RefreshDatabase

這個應該是最常用到的自動化測試 Trait 了,它可以說是 DatabaseMigrations 與 DatabaseTransactions 的綜合體。使用它以後,它會判斷目前所使用的測試資料,是否為 In-memory 的形式,如果是,那就會執行 migrate;如果不是,則會在每一次測試執行前,先判斷是否執行過 migrate,如還未執行則執行之,如已執行,啟動資料庫的 Transaction 機制。

與 DatabaseMigrations 比較大的區別是,DatabaseMigrations 會讓 auto-generated ID 歸零,RefreshDatabase則不會。

WithoutMiddleware

有時我們要測試的功能,剛好會經過 Middleware ,而有時要讓測試能正常的通過 Middleware ,可能需要做一些準備,例如手動產製 Bearer Token 放入 Header ,以便過 auth 這個 Middleware 。

然而有時 Middleware 的邏輯,未必是此時我們想要測的目標,此時就可以使用這個 Trait ,讓我們在執行測試時,可以略過 Middleware 層,以便我們專注於我們想要測試的對象及其行為。

WithoutEvents

有時當我們不想在測試執行時,觸發各種 Event 時,便可使用這個 Triat ,不過筆者實務上不曾使用過。

WithFaker

還記得前一天在使用 factory 時,有個神秘的 $faker 嗎?這個 Trait 可以讓我們在測試程式碼中,也可以隨心所欲地產生假資料值。

以上就是今天要為大家介紹的幾個 Trait,建議大家可以自行實作幾個案例來用看看唷!(不過與資料庫相關的 Trait,如果初期還不熟的話,建議拿空的資料庫來做測試喔)

下一篇我們來討論 Auth 測試!

如果您喜歡這篇文章,歡迎加入追蹤以接收新文章通知 😄

參考資料

本系列文章目錄

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.