現在有個 controller 收到 HTTP POST data 以後才會動作,且這個 controller 為 AJAX controller,沒有 view 沒辦法用 Selenium 測試:
class TargetController extends Controller
{
public function doSomething(Request $req)
{
// do something ....
}
}
要測試的話,其實可以透過一些工具手動測試,像是 PostMan 等類似的工具。但這種測試會遇到一些問題:Middle 有檢查使用者身份、需要拿到 access token 才能進 controller 等等。這樣會讓測試多了不少不確定因素 (變因),導致測試結果不準確。
要進行測試較好的方法,就是建立一個 HTTP request 來模擬實際情況:
$req = new lluminateHttpRequest();
$ctrl = new TargetController()
$result = $ctrl->doSomething($req);
不過可惜的是 Request 這個類別,設計原始的用意是從 $_GET、$_POST、$_FILE 等全域變數整理成物件方便 access,所以若要在 request 中加入參數,目前只能透過 replace() 來增加。例如需要新增 key/value pair,必須這樣撰寫:
$request->replace([
'key' => 'value',
]);
至於模擬檔案上傳 …. 我還在找方法,確定了以後再來寫筆記。
Ref: