Внедренный объект запроса Laravel отличается от объекта, полученного функцией request () - PullRequest
1 голос
/ 17 июня 2019

Справочная информация. Я пишу тест функции для проверки реализации аутентификации HMAC. В моем тесте я установил заголовок Authorization: Bearer {token} и отправил простой запрос GET следующим образом:

$headers = ['Authorization' => 'Bearer '.$token];
$response = $this->get($uri, $headers);

В моем реальном Auth Guard я вставляю объект запроса в конструктор и получаю заголовок:

class HMACGuard implements Guard
{
    public function __construct(
        UserProvider $provider,
        Request $request
    ) {
        $this->request = $request;
        $this->provider = $provider;
    }

    public function user()
    {
        // ...
        $token = $this->request->bearerToken();
        // ...
    }
}

Это работает с обычными запросами (через браузер или Почтальон и т. Д.). Однако это не работает с юнит-тестами. Но это работает:

    public function user()
    {
        // ...
        $token = request()->bearerToken();
        // ...
    }

Почему внедренная версия отличается и не содержит информации заголовка, как та, что была извлечена из контейнера? Возвращенные объекты, очевидно, отличаются с разными идентификаторами. Как я могу убедиться, что введен правильный экземпляр Request, который будет содержать всю информацию для любого типа запроса? Есть ли способ убедиться, что я получаю доступ к нужному объекту Request без использования глобальных помощников / фасадов, таких как request() и Request?

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