@FulgerX2007

Как протестировать middleware c сессиями?

Есть middleware
class Warning
{
    public function handle(Request $request, Closure $next)
    {
        if (!Route::is('warning') && $request->session()->exists('Warning')) {
            return redirect()->route('warning');
        }

        return $next($request);
    }
}


И есть тест к нему:
class WarningTest extends TestCase
{
    public function testAcceptedWarning(): void
    {
        $request = new Request();
        
        $request->session()->put(['test' => true]);
        $middleware = new Warning();

        $response = $middleware->handle($request, static function () {
            return true;
        });
        self::assertTrue($response);
    }
}


При запуске теста получаю ошибку:
RuntimeException : Session store not set on request.
на линии где создается сессия
$request->session()->put(['test' => true]);
.

В файле phpunit.xml есть строка
<server name="SESSION_DRIVER" value="array"/>

Как мне решить эту проблему с сессией?
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 1
dlnsk
@dlnsk
ПК Партнер 01.01 -> ПК Поиск -> IBM PC
Дело в том, что объект Request создается "пустой". Нет объекта Session, который был бы связан с запросом. Поиск текста ошибки по исходникам легко приведет вас к месту ошибки, а оттуда нетрудно добраться и до инициализации.

Может вам проще воспользоваться способом, описанным в документации:
https://laravel.com/docs/5.8/http-tests#session-an...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы