Laravel 6 модульное тестирование PHP — Хранилище сеансов не установлено по запросу

#php #laravel

Вопрос:

Я получил ошибку времени выполнения (исключение времени выполнения: хранилище сеансов не установлено по запросу.) во время выполнения модульного тестирования

 public function testUserCanLoginCorrectCredentials() {  $this-gt;withoutExceptionHandling();  $user = factory(Users::class)-gt;create();  $response = $this-gt;post('/admin/login', [  'email' =gt; $user-gt;email,  'password' =gt; '123456789',  ]);  $response-gt;withSession(['user_id' =gt; $user-gt;id]);  $response-gt;assertRedirect('/admin/dashboard');  $this-gt;assertAuthenticatedAs($user); }  

В Контроллере :

 $checkUserExist =$this-gt;users-gt;where('email',$request-gt;email)-gt;where('password',$request-gt;password)-gt;first(); if(isset($checkUserExist)){   $user = Auth::guard('users');  $users = Auth::login($checkUserExist);  //Authentication passed...  $request-gt;session()-gt;put('admin_user_id', $checkUserExist-gt;id);  return redirect('admin/dashboard')-gt;with('success', 'You are Logged in !'); } else {  return redirect('/admin')-gt;with('error','Invalid Password, Please Entered Correct Credentials!'); }  

Во время выполнения команды я получаю эту ошибку

 Time: 1.76 seconds, Memory: 52.00 MB  There was 1 error:  1) TestsUnitHostLoginTest::testUserCanLoginCorrectCredentials RuntimeException: Session store not set on request.  C:xampphtdocsparkk-webvendorlaravelframeworksrcIlluminateHttpRequest.php:482 C:xampphtdocsparkk-webappHttpControllersAuthLoginController.php:107 C:xampphtdocsparkk-webvendorlaravelframeworksrcIlluminateRoutingController.php:54 C:xampphtdocsparkk-webvendorlaravelframeworksrcIlluminateRoutingControllerDispatcher.php:45 C:xampphtdocsparkk-webvendorlaravelframeworksrcIlluminateRoutingRoute.php:219 C:xampphtdocsparkk-webvendorlaravelframeworksrcIlluminateRoutingRoute.php:176 C:xampphtdocsparkk-webvendorlaravelframeworksrcIlluminateRoutingRouter.php:680  

Комментарии:

1. Это больше похоже на интеграционный тест, а не на модульный тест.

2. withSession предназначено для установки на запрос, а не на ответ, т. е. ставьте его раньше -gt;post .

Ответ №1:

Похоже, что ваш сеанс не найден в запросе. Наиболее вероятной причиной этого является неиспользование IlluminateSessionMiddlewareStartSession::class промежуточного программного обеспечения в вашем ядре, которое отвечает за запуск сеанса.

Я бы также предложил не хранить пароль пользователя непосредственно в базе данных, а скорее хэшировать его и проверять при входе в систему.