首页 > 解决方案 > Laravel Sanctum 测试

问题描述

我正在尝试测试我的 API 身份验证方法,因此我创建了 ConfirmPasswordControllerTest :

/** @test */
public function confirm_password_confirms()
{
    $user = factory(User::class)->create();
    $data = ['password' => 'password'];

    $response = $this->actingAs($user)
                ->post('api/password-confirmation', $data);

    dd($response);
    $response->assertStatus(200);
}

我使用 dd() 检查响应中的错误消息,我一直看到:

RuntimeException: Session store not set on request.

我不明白这里发生了什么,我使用的是 Laravel Sanctum,所以我的 api 路由有 auth:sanctum 中间件。

编辑:如果我在帖子中不包含任何数据,例如:

$response = $this->postJson('api/password-confirmation');

测试按预期运行:

{"message":"The given data was invalid.","errors":{"password":["The password field is required."]}}

编辑 2:我调试应用程序,我发现问题出在 PasswordConfirmController 上:

public function confirm(Request $request)
{
    $request->validate($this->rules(), $this->validationErrorMessages());

    $this->resetPasswordConfirmationTimeout($request); //HERE

    return $request->wantsJson()
                ? new Response('', 204)
                : redirect()->intended($this->redirectPath());
}

它调用 resetPasswordConfirmationTimeout() 并且此方法需要使用会话:

protected function resetPasswordConfirmationTimeout(Request $request)
{
    $request->session()->put('auth.password_confirmed_at', time());
}

标签: phplaravellaravel-testinglaravel-sanctum

解决方案


推荐阅读