Laravel – Unit Test 單元測試教學

Laravel 整合了 phpunit 製作單元/功能測試,我們以空專案 blog 來進行範例。

資料庫設定

寫測試的時候,建立一份專門提供給測試的資料庫,避免與實際運作的開發環境共用。根目錄底下,複製一份 .env 為 .env.testing 並修改內容,運行測試的時候透過 artisan 指令添加參數 –env=testing 將會覆蓋 .env 的值

修正 DB 支援的問題

若出現 Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes 那麼請修改 app/Providers/AppServiceProvider.php

建立 Migration

一開始先建立 DB Schema

記住,我們要運行在測試資料庫

建立資料表 Posts

建立測試資料工廠

這裡的工廠 PostFactory 負責定義我們的假資料工廠,只要返回我們需要的欄位即可

建立單元測試

我們在單元測試中會做這幾件事情

  • 建立兩筆資料
  • 驗證是否符合預期
  • 刪除測試資料

可以建立多個方法來進行測試,命名的規則例如

  • testExample() 在測試顯示時的名稱叫做 Example
  • testUserRegister() 在測試顯示時的名稱叫做 User register

我們嘗試編寫

接著運行測試,但很重要的記得清除緩存 config:clear,讓測試環境能抓取 .env.testing。

功能測試

上面做的是單元測試,那假設我們要測試 API 是否符合預期,我們則要使用功能測試。

新增一個 Controller

現在新增路由

接著下指令產生功能測試

接著嘗試訪問 API,並斷言回傳的 JSON 符合我們的結構

如果要在 Request 加入 Header 可以這麼寫

若要為 Response 除錯,可以選用添加

如果使用 phpStorm 進行測試,我們可以透過設定進行測試,請參考這篇

發表迴響