我們今天來針對API做更進一步的測試,
假如我們今天要取得一個使用者資料,
這個使用者的資料有 代號(id)、姓名(name)、電話(phone)
我們現在在MyFirstUnitTest.php寫了一個新的方法
public function test_user_get_name()
{
$this->post('/api/user/1')
->assertJson(fn (AssertableJson $json) =>
$json->where('id', 1)
->where('name', '小魚')
->missing('password')
->etc()
);
}
我們指定了id跟name參數的內容,
並且不應該出現password這個參數,
後面有一個etc()表示我們忽略其他的參數,
如果回傳的資料有其他的參數,
但是我們沒有調用etc()方法的話,
我們的測試將會失敗。
然後我們來測試看看
php artisan test
結果是找不到這個路由,
因為我們還沒有實作,
接下來我們新增一個Model
App\Entity\User.php
<?PHP
namespace App\Entity;
use DateTimeInterface;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
//資料表名稱
protected $table = 'user';
//主鍵名稱
protected $promaryKey = 'id';
//可以大量指定異動的欄位(Mass Assignment)
protected $fillable = [
'name',
'phont',
];
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
}
?>
然後我們在APIController.php新增一個方法,
正常來說我們會去撈資料庫的資料,
或是其他的方式,
不過在這裡我們直接把結果回傳,
當然要記得引用 use App\Entity\User;
function GetUser($id)
{
$result = new User;
if($id == 1)
{
$result->id = 1;
$result->name = '小魚';
$result->phone = '7533967';
}
return json_encode($result);
}
然後在api.php新增路由
Route::group(['prefix' =>'user'], function(){
Route::post('/{id}', [APIController::class, 'GetUser']);
});
我們再測試看看
php artisan test
順利地通過測試了!