php – testing – 在 Laravel 專案透過 phpStorm 設定 phpunit

使用 phpStorm 版本 2019.1.3 進行教學,首先設定,我們在快捷鍵按下 Ctrl + Shift + A 輸入 Edit Configurations

點選右下角 FIX
兩個都指定版本例如 PHP7.3,之後點選 OK
發現這裡本來的錯誤消失了,之後再按 OK

接著我們下快捷鍵 Ctrl + Shift + A 輸入 Settings,進入 Languages & Frameworks > PHP > Test Frameworks

指定測試項目
我們直接使用 Composer 的 PHPUnit ,並指定 phpunit.xml 設定檔位置

接下來打開測試檔案,我們可以直接在 methods 左側的綠色箭頭,點擊後會自動運行測試

如果運行成功會出現綠色打勾

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 除錯,可以選用添加

php – laravel – 將已存在的資料庫匯出 migration 與 seed

匯出 Migration

首先安裝這個套件,先匯出 DB Schema 到 migration

Laravel 5.5 以後的版本,下載好後就不需安裝任何的 Providers。使用方法如:

不過資料表欄位的型態,若是 Enum 的時候,目前版本 v2.0.2 會出錯,請修改 src/Xethron/MigrationsGenerator/Generators/FieldGenerator.php

主要是 MySQL 8 返回的欄位名稱是大寫, MariaDB 返回的是小寫,需要稍作修改就可以了。我提出了合併請求,不過我看目前開發者合併停滯在 2017 年,因為這個功能僅單次使用,我也就不再 fork 了,手改一下就好。

匯出 Seed

接著產出 seed,就下載這個套件

一樣 Laravel 5.4 以後不需要做任何安裝設定。比較麻煩的是要個別指定匯出的資料表名稱,使用方法如

Mysql – mysqldump 備份還原指令

參考網友文章

備份

把 hostname 位置在 127.0.0.1 的資料庫 testdb ,匯出到 dump.sql

還原

將 dump.sql 匯入到資料庫 testdb

php – Laravel – 解決 env() 取出的值為 null

因為 Laravel 會製作快取,所以我們要清空

測試看看

這樣就可以正常顯示了