Как смоделировать переменные сессии в phpunit с Symfony - PullRequest
0 голосов
/ 30 ноября 2018

Я делаю функциональные тесты для программного обеспечения 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}} в шаблоне, тест будет работать правильно.

Кто-нибудь знает, какправильно установить переменную в сеансе?Спасибо.

...