Сессия всегда пуста в тесте Twig в Symfony 4 - PullRequest
0 голосов
/ 28 марта 2019

При обновлении Symfony 3.4 до Symfony 4.2 у меня все модульные тесты проходят отдельно от функциональных тестов на контроллерах, на которых рендерится Twig, и используют app.session.get('my_session_variable').

Используя стандартный app.session, sessionвсегда null.

Я получаю сообщение об ошибке:

Twig\Error\RuntimeError : Impossible to invoke a method ("get") on a null variable.

Кажется, сеанс не устанавливается, даже когда я явно устанавливаю сеанс в настройке теста через:

$this->client->getContainer()->get('session')->set('my_session_variable', 'help');

Код выглядит следующим образом:

Класс тестирования:

final class HomepageTest extends WebtestCase
{
    public function setUp(): void
    {
        parent::setUp();

        $this->client = static::createClient();
        $this->router = $this->client->getContainer()->get('router');
    }

    public function testMyPatience(): void
    {
        $url = $this->router->generate('homepage');
        $this->client->request('GET', $url);

        $this->assertSame(200, $this->client->getResponse()->getStatusCode());
    }
}

Класс контроллера:

final class Homepage extends AbstractController
{
    /**
     * @Route("/homepage", name="homepage", methods={"GET"})
     */
    public function index(): Response
    {
        return $this->render('homepage.html.twig');
    }
}

Шаблон ветки:

{% if app.session.get('my_session_variable') != null %}
    <p>Session variable is set</p>
{% endif %}

config / test / framework.yaml:

framework:
  test: true
  session:
    storage_id: session.storage.mock_file

1 Ответ

0 голосов
/ 28 марта 2019

Для всех, у кого есть эта проблема, решение было использовать:

app.request.session.get('my_session_variable')

Вместо:

app.session.get('my_session_variable')
...