Laravel Unit Testing - добавить cookie в запрос? - PullRequest
0 голосов
/ 06 января 2019

Я хочу отправить куки с JSON POST:

public function testAccessCookie()
{
    $response = $this->json('POST', route('publications'))->withCookie(Cookie::create('test'));
    //some asserts
}

Публикация маршрута имеет некоторое промежуточное ПО:

public function handle($request, Closure $next)
{
    Log::debug('cookie', [$request->cookies]);

    //cookie validation

    return $next($request);
}

Но во время работы testAccessCookie(), внутри журнала [null]. Куки не прикреплены.

Что не так?

Нет такой проблемы с реальными (в браузере) запросами.

1 Ответ

0 голосов
/ 05 февраля 2019

Вы можете добавить куки к звонкам в тестах:

$cookies = ['test' => 'value'];

$response = $this->call('POST', route('publications'), [], $cookies);

См. https://laravel.com/api/5.4/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.html#method_call

Однако вы столкнетесь с проблемой шифрования файлов cookie. Вы можете временно отключить куки во время тестирования с помощью:

use Illuminate\Cookie\Middleware\EncryptCookies;

/**
 * @param array|string $cookies
 * @return $this
 */
protected function disableCookiesEncryption($name)
{
    $this->app->resolving(EncryptCookies::class,
        function ($object) use ($name)
        {
          $object->disableFor($name);
        });

    return $this;
}

Добавление $this->disableCookiesEncryption('test'); в начале теста.

Возможно, вам потребуется добавить заголовки, чтобы указать ответ json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...