laravel - 如何使用 API middelware 在 Laravel 上测试 PHPUnit 一个经过身份验证的用户?
问题描述
我正在尝试测试需要经过身份验证的用户的路由和端点,但我遇到了一些麻烦。¿如何在我的测试功能中登录用户?
- 我的数据库模型不是 Eloquent-Model。
- 我正在使用 phpUnit 进行测试
端点:
Route::middleware('auth:api')->get('/myroute', 'MyController@MyFunction');
控制器(它在前端工作正常):
public function MyFunction()
{
$loggedUser= auth()->user()->getAuthIdentifier();
$results= $this->myUsecase->execute(new myCommand(new UserId($loggedUser)));
return $this->response($this->serializer, $results);
}
测试:
function testMyControllerCanSendResults()
{
$response = $this->get('/api/myroute');
$response->assertOk();
}
此测试失败,因为应用程序要求经过身份验证的用户在 Usecase 中使用他的Identificator。
我试图为“Usuario”模型制作一个定制的 Fake Factory(但我遇到了问题,因为我的“Usuario”模型不是 Eloquent 模型。
我可以尝试什么?非常感谢!!!
解决方案
@Saly3301
这是我的“登录”功能:
public function doLogin(Request $request){
$username = $request->input('username');
$password = $request->input('password');
if (Auth::guard('web')->attempt(['user' => $username, 'password' => $password])) {
$user = Auth::user();
$respuesta['api_token'] = Auth::User()->api_token;
$respuesta['id'] = Auth::User()->id;
$respuesta['rol'] = Auth::User()->rol;
$respuesta['status'] = 200;
return $this->response($this->serializer, $respuesta);
} else {
$respuesta['status'] = 400;
return $this->response($this->serializer, $respuesta);
}
}
用户登录后,“api”中间件就可以正常工作(我在来自前端的请求中使用了 api_token - 它是一个 React-admin 前端)