Я делаю функциональные тесты для программного обеспечения PHP / Symfony / Twig.
Я пытаюсь включить переменную в симулированный сеанс PHP для функционального теста PHPUnit.Я хочу, чтобы мой шаблон ветки мог читать переменную в смоделированном сеансе следующим образом:
{{ session.myvar }}
, поэтому я сначала попытался так:
$client = static::createClient();
$sessionMock = new Session(new MockFileSessionStorage());
$sessionMock->set("myvar", 123);
$client->getContainer()->set('session', $sessionMock);
$crawler = $client->request('GET', '/');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
получил 500 результатов из запроса,Поэтому я включил var_dump(trim($crawler->text()));
и запустил тест с --verbose.Это показало мне ошибку:
Key "myvar" does not exist as the array is empty. (500 Internal Server Error).
Поэтому я попытался настроить myvar другими способами:
$client->getContainer()->get('session')->set('myvar', 123);
$client->getContainer()->set('myvar', 123);
$sessionMock->myvar = 123;
Ни один из них не помог.Я попытался создать дамп сеанса в шаблоне следующим образом:
{% dump(session) %}
, который вывел: ::base.html.twig on line 120: []
в консоль
, если я vardump $ mockedSession:
var_dump($sessionMock); // result: Session object with a subvar with 123 value due to $sessionMock->myvar = 123
var_dump($sessionMock->get('myvar')); // result: 123
Я получаю переменную в объекте $ sessionMock со значением 123.
Если я удалю тег {{session.myvar}} в шаблоне, тест будет работать правильно.
Кто-нибудь знает, какправильно установить переменную в сеансе?Спасибо.