
專案設定 - Clean Architecture in TypeScript
這一系列會預設在 Cloudflare 相容的環境下運行,在前端開發的部分會以 Vite 搭配 Hono 來使用,這幾個工具有很不錯的相容性,很適合在這次的情境中使用。
這一系列會預設在 Cloudflare 相容的環境下運行,在前端開發的部分會以 Vite 搭配 Hono 來使用,這幾個工具有很不錯的相容性,很適合在這次的情境中使用。
經過調整成 ViteRuby 的專案結構後,我們已經讓 Vite 所撰寫的前端恢復基本的功能。然而我們使用 Grape 所撰寫的後端行為還無法正常運作,因此接下來我們要用類似的方法將後端重新實現,並且通過所有的 Cucumber 測試。
我們在前面的練習中大部分的實作都是可以直接沿用,唯一需要重新處理的是 Cucumber 的步驟定義,他會受到使用的語言、框架需要重新撰寫,接下來我們會先將前端的實作搬移到 Rails 中讓專案能夠運作起來。
在前面的實作中我們將前端跟後端分別獨立進行開發,這是很常見的一種方式。然而在 Rails 7 的生態系裡面,透過 jsbundling-rails 可以很輕鬆的整合在一起,接下來我們會使用類似基礎的 ViteRuby 把前端的 Cucumber 測試搬移到 Rails 上重現一次性整合完畢的實作。
在開始實作後端之前,我們先將原本都集中在 src/App.vue
的程式碼整理一下。這個處理也可以在開發的過程中逐步重構,可以根據現況調整。
透過 Playwright 的 Mock API 機制,我們已經有了非常簡單的後端整合機制,接下來我們要繼續加上結帳的按鈕並且模擬成功跟失敗的兩種情境,讓我們在不依賴後端的狀況下完成一個非常基礎的購物車前端實現。
現階段我們已經具備了新增跟移除商品的機制,然而要跟後端搭配的話就無法避免跟真實的 API 來進行串接,在測試環境中就不會那麼好處理。我們可以利用 Playwright 的 Mock API 機制來模擬我們想要的 API 回應。
延續現有的「加入購物車」功能,我們要繼續加入「移出購物車」的機制,因為原本的設計只是單純的滿足計數,這次還需要實現實際存在的商品列表來反應現實狀況。
我們現在已經準備好了可以使用 Cucumber 撰寫功能測試(Feature Test)的開發環境,接下來我們會用前端實作購物車的功能並且測試,然後接續實現後端完成一個具備非常基礎功能的前後端分離專案。
因為 Cucumber 是能夠跨越不同開發環境使用的,因此這次我們會以前端與後端互相搭配的方式進行,在前端的部分採用 Vite 和 Playwright 來進行測試。