iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
Software Development

同一套 Laravel 系統,測試怎麼寫才不會說謊 系列

同一個系統要維護兩個版本的對外介面,還要跟一個不受自己控制的外部系統交換資料。這個系列從一套真實運作中的 Laravel 專案的 63 支測試檔案出發,記錄測試分層怎麼設計才有意義:哪一層的失敗該讓你立刻知道是自己程式壞了,哪一層只是外部系統的資料長得跟預期不一樣。涵蓋 Unit/Feature 測試分層、測試替身設計、外部 SOAP 服務的整合測試手法,以及幾次「測試通過但沒有真的驗證到東西」的真實踩坑紀錄。

參賽天數 23 天 | 共 23 篇文章 | 1 人訂閱 訂閱系列文 RSS系列文
DAY 1

Day 01:系列介紹——同一套 Laravel 系統,測試怎麼寫才不會說謊

前言 「測試不是分 Unit 跟 Feature 兩層就好了嗎?為什麼還要另外花 30 天講這件事?」 如果你的專案只有一套對外介面、不用跟任何外部系統交換資料...

2026-09-02 ‧ 由 recca0120 分享
DAY 2

Day 02:一次 PHPUnit → Pest 的遷移,殘留了什麼

前言 「這個專案的測試是用 Pest 寫的還是 PHPUnit 寫的?」 如果你隨手打開這個系統的 tests/ 目錄亂逛,答案看起來很明確:滿眼都是 test...

2026-09-03 ‧ 由 recca0120 分享
DAY 3

Day 03:測試輔助函式設計——asAdmin()/asSuperAdmin() 怎麼幫全專案省重複程式碼

前言 「每支測試都要先登入一個有權限的使用者,是不是寫一個共用函式,直接把使用者塞進去就好?」 聽起來理所當然,但這句話裡藏著一個容易被忽略的陷阱:如果那個「共...

2026-09-04 ‧ 由 recca0120 分享
DAY 4

Day 04:Model Factory 語意化設計,測試資料怎麼建立才不會互相污染

前言 「User::factory()->create() 建出來的使用者,到底是一般人還是管理員?」 如果你的測試套件裡到處都是這種通用的 factor...

2026-09-05 ‧ 由 recca0120 分享
DAY 5

Day 05:測試資料建置的取捨——migration 內建資料 vs factory 建立

前言 「這筆測試需要的資料,migration 裡本來就有塞了,直接拿來用不就好了?」 這句話聽起來很省事——反正資料已經存在,何必再多寫一段 Factory...

2026-09-06 ‧ 由 recca0120 分享
DAY 6

Day 06:Model 的兩種純邏輯單元測試——accessor 跟 Query Scope

前言 「這支測試要不要用 RefreshDatabase?」 這是一個看起來很小、但每次寫 Unit 測試都會遇到的判斷。今天要用這個系統裡兩支真正的純邏輯 U...

2026-09-07 ‧ 由 recca0120 分享
DAY 7

Day 07:一次排序邏輯的回歸——Feature 測試補上後才抓到的舊 bug

前言 「這段排序邏輯已經跑了很久,應該沒問題吧?」 這句話幾乎是每個維護老專案的人都說過的話。今天要講的案例,剛好打臉了這句話:這個系統的首頁排序邏輯,實際上早...

2026-09-08 ‧ 由 recca0120 分享
DAY 8

Day 08:Feature 測試基礎——一個 HTTP 請求怎麼測到「畫面對不對」

前言 「這個頁面回傳 200,測試就算過了嗎?」 這是很多人寫 Feature 測試時,不知不覺會停下來的地方——狀態碼是 200,代表伺服器沒有拋出例外、路由...

2026-09-09 ‧ 由 recca0120 分享
DAY 9

Day 09:Filament 後台測試怎麼寫——測「動作有沒有真的發生」而不是「畫面長什麼樣」

前言 「後台是用 Filament 這種管理面板套件開發的,測試也要照一般 HTTP 頁面那樣打請求、看回應內容嗎?」 答案是不行——至少不是最有效的方式。Fi...

2026-09-10 ‧ 由 recca0120 分享
DAY 10

Day 10:巢狀資源測試——樹狀編輯介面的獨立模式 vs 內嵌模式怎麼測

前言 「同一個元件,有時候要單獨顯示,有時候要嵌在別的頁面裡顯示,這種情況測試該怎麼寫?」 昨天講的是「怎麼測一個 Filament 元件的動作有沒有真的發生」...

2026-09-11 ‧ 由 recca0120 分享