Как сделать HTTP-запрос от имени другого сеанса в тесте Laravel? - PullRequest
0 голосов
/ 19 мая 2018

Когда я выполняю тесты HTTP в Laravel 5 с использованием встроенных инструментов , платформа запоминает данные сеанса от запроса к запросу.

class HttpTest extends TestCase
{
    public function testApplication()
    {
        // Suppose this endpoint creates a session and adds some data to it
        $this->get('/action/fillSession');

        // Suppose this endpoint reads the session data
        $this->get('/action/readSession'); // The session data from the first request is available here
    }
}

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

1 Ответ

0 голосов
/ 19 мая 2018

Запомните данные первого сеанса, очистите сеанс приложения, сделайте запрос «другого сеанса» и верните исходные данные сеанса обратно в приложение:

class HttpTest extends TestCase
{
    public function testApplication()
    {
        // Suppose this endpoint creates a session and adds some data to it
        $this->get('/action/fillSession');

        $session = $this->app['session']->all();
        $this->flushSession();
        $this->get('/noSessionHere');
        $this->flushSession();
        $this->session($session);

        // Suppose this endpoint reads the session data
        $this->get('/action/readSession'); // The session data from the first request is available here
    }
}

Вы можете выполнить этот алгоритмк отдельному способу его повторного использования легко:

class HttpTest extends TestCase
{
    public function testApplication()
    {
        // Suppose this endpoint creates a session and adds some data to it
        $this->get('/action/fillSession');

        $this->asAnotherSession(function () {
            $this->get('/noSessionHere');
        });

        // Suppose this endpoint reads the session data
        $this->get('/action/readSession'); // The session data from the first request is available here
    }

    protected function asAnotherSession(callable $action)
    {
        $session = $this->app['session']->all();
        $this->flushSession();

        $action();

        $this->flushSession();
        $this->session($session);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...