首页 > 解决方案 > 如何使用 API middelware 在 Laravel 上测试 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 模型。

我可以尝试什么?非常感谢!!!

标签: laravelapiauthenticationtestingphpunit

解决方案


@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 前端)


推荐阅读