我們再回來寫API的單元測試,
之前的範例只有寫到回傳單一值而已,
但是通常我們寫的API,
會是一個Json的格式,
而且可能會有複雜的內容,
可能有固定的格式,
也可能沒有。
我們接下來要實作一個API,
當我們用Post傳送一個name資料過去的時候,
就要回傳新增資料成功的回應。
(當然只是模擬,我們這次不會操作資料庫)
我們在BrowserUnitTest.php新增一個方法
public function test_user_add_name()
{
$this->post('/api/user/add', ['name' => 'Sally'])
->seeJson([
'created' => true,
]);
}
我們預期這個Json會包含 ['created' => true]
這個內容,
然後執行測試,
當然這個測試一定會失敗
php artisan test
如同我們所預期的,
測試回傳了錯誤,
然後我們接下去寫API
我們先把原來的api.php改成跟web.php一樣的型式
use App\Http\Controllers\API\APIController;
Route::post('/getLeapYear/{year}', [APIController::class, 'checkLeapYear']);
然後在APIController新增一個API方法
記得要 use Validator;
function AddUser(Request $request)
{
$input = $request->all();
//驗證規則
$rules = [
//名稱
'name' => [
'required',
],
];
//驗證資料
$validator = Validator::make($input, $rules);
$result = [];
if($validator->fails())
{
$result['created'] = false;
}
else
{
$result['name'] = $input['name'];
$result['created'] = true;
}
return json_encode($result);
}
然後在api.php新增
Route::group(['prefix' =>'user'], function(){
Route::post('/add', [APIController::class, 'AddUser']);
});
我們再執行一次測試
php artisan test
我們測試成功了!