這陣子以來深入使用了之前朋友介紹的 Tinkerwell,隨著使用時間的增加慢慢覺得它是我目前開發上不可或缺的工具,原因在於它幫我省下許多測試時間。不知道你有沒有開發過一種需求是必須經過超多前端操作步驟才能觸發結果的功能?
舉個例子,有個功能是當訂單完成後以後,要新增一個 N 天後的排程檢查訂單是否有付款成功,如果沒有的話要寄電子郵件通知客戶,然後信件內文要帶入從第三方金流回傳的付款資訊以及重新付款連結。
為了要檢查信件內容的資訊是否正確,我會這樣測試:
- 進入前台商品頁
- 將商品加入購物車
- 在結帳頁輸入結帳資訊以及選擇特定的付款方式
- 送出訂單後在後台改變訂單狀態以建立排程
- 前往 WooCommerce 排程管理點擊 Run 手動觸發排程
- 開啟收信軟體檢查信件內文是否正確,
然後每改一次信件內容我就要跑上面六個步驟反覆測試。
雖然上述的例子可能有點誇張,但我常常就是被這些測試步驟搞得很煩,我試著學習寫自動化測試來簡化測試步驟,但為了要寫出測試腳本有時候反而會繞好大一圈,而 Tinkerwell 幫我解決了這個大難題。
Tinkerwell 介紹
Tinkerwell 基本上就是一個文字編輯器,但沒有像 VSCode 有各種包含包海的功能,它做的事情就是單純把 PHP 的執行結果輸出在下方視窗中,省去以往為了要寫 PHP 還必須先建立開發環境與伺服器,而且還可以立即看到輸出結果:
除了基本的 PHP 外,最棒的地方是它支援 WordPress 的 API,不管是 WP_Query
、WC_Order_Query
,或是每天一定會用到的 get_option
、get_post_meta
這些 WordPress 內建方法的都可以無痛使用。
如果你有寫過 PHPUnit Test 就會知道,這些 WordPress 的方法都要自己 Mock 出來,而這些自己刻出來的方法有時候雖然可以通過單元測試,但少了與真實資料庫的連結還是會發生預期外的狀況,有了 Tinkerwell 完全不用擔心這問題,就照平常自己寫程式的習慣來測試即可。
Tinkerwell 應用
你可能會問:我們自己寫的類別或方法也可以用嗎?我會說這就是 Tinkerwell 最美妙的地方,你只要在開啟資料夾的時候選擇本機的 WordPress 檔案位置,那麼在這目錄底下所有佈景主題與外掛的方法都可以呼叫得到。
因此回到上述那個範例,我要檢查信件內容的資料是否正確,我只要呼叫我自己產出信件內容的方法就好,然後手動帶入指定的訂單參數,由於 Tinkerwell 可以直接跟資料庫互動,因此我就能知道執行的結果是否如我所預期的。
除了本機以外,它也可以用 SSH 遠端連線主機上的 WordPress 網站,這樣就可以在本機測試遠端主機上的程式碼,順帶一提,它拿來作為教學使用也非常方便,尤其是介紹 WordPress 的 API 時可以直接拿到資料庫的資料,就不用再切換到瀏覽器查看輸出結果。
如果你也正在學習 WordPress 開發,大推 Tinkerwell 這套工具!