#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
промежуточного программного обеспечения в вашем ядре, которое отвечает за запуск сеанса.
Я бы также предложил не хранить пароль пользователя непосредственно в базе данных, а скорее хэшировать его и проверять при входе в систему.