При обновлении 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