什麼是測試
測試是自動驗證程式碼是否如預期運作的機制。 撰寫測試後,加入功能或修改時能迅速確認既有行為是否被破壞。 在團隊開發中,有測試就能安心變更程式碼與 review。 Laravel 從一開始就內建測試支援,可使用 Pest 與 PHPUnit 兩者。 全新安裝時已自動準備phpunit.xml 設定檔與 tests/ 目錄。
tests/ 目錄結構
Feature/— 放功能測試。用於包含 HTTP 請求等較大單位的測試。適合驗證多個物件協作、API 端點等接近整體應用的測試。多數測試都會放這裡。Unit/— 放單元測試。用於單一類別或方法等小單位的測試。不會啟動 Laravel 應用,因此不能使用資料庫或其他框架功能。
建立測試
以make:test Artisan 指令產生新的測試類別。
tests/Feature/TodoTest.php。
執行測試
以php artisan test 指令執行測試。
vendor/bin/pest 或 vendor/bin/phpunit 也能得到相同結果,但 php artisan test 有較易讀的輸出,較推薦。
要只執行特定測試套組時可用選項:
基本測試撰寫
簡單斷言的範例。常用斷言
HTTP 測試
Laravel 的 HTTP 測試無需實際啟動 HTTP 伺服器即可模擬對路由的請求。 這是Feature/ 目錄下測試類別中可用的強大功能。
確認頁面顯示
用get() 方法送 GET 請求並驗證回應。
ToDo 應用的 HTTP 測試範例
以有Todo model 的應用為例,測試 CRUD 各項操作。
常用回應斷言
使用
RefreshDatabase trait 會在每次測試執行後重設資料庫。用於避免測試間資料互相干擾。測試環境
phpunit.xml 的設定
在專案根目錄的 phpunit.xml 中做測試環境設定。
預設 session 與 cache 都設為 array driver,測試執行中不會留下資料。
.env.testing 檔案
在專案根目錄建立 .env.testing,執行測試時會取代 .env 讀入。
可用於分開測試專用的資料庫連線或外部服務設定。
平行測試
測試數量增加後執行時間會拉長。 用--parallel 選項可用多個 process 平行執行測試以縮短時間。
先安裝 brianium/paratest 套件。
--parallel 選項執行:
--processes 選項。
後續步驟
HTTP 測試
可確認請求模擬、附帶認證的測試、JSON 斷言等更詳細的 HTTP 測試方式。