Laravel Испытание святилища - PullRequest
1 голос
/ 30 мая 2020

Я пытаюсь протестировать свои методы аутентификации 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());
}
...