Я пытаюсь протестировать свои методы аутентификации 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.
EDIT: если я не включаю никаких данных в сообщении:
$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());
}