Я пишу функциональный тест для действия, которое использует службу сеансов Symfony2 для извлечения данных. В методе setUp
моего тестового класса я вызываю $this->get('session')->set('foo', 'bar');
, Если я выведу все данные сеанса (используя print_r($this->get('session')->all());
) либо в setUp
либо в реальном методе тестирования, я возвращаюсь foo => bar
. Но если я попытаюсь выдавать данные сеанса из проверяемого действия, я возвращаю пустой массив. Кто-нибудь знает, почему это происходит, и как я могу это предотвратить?
Я должен отметить, что если я вызову $_SESSION['foo'] = 'bar'
изнутри setUp()
данные сохраняются, и я могу получить к нему доступ из действия – эта проблема кажется локальной для сеансовой службы Symfony2.
Сначала попробуйте использовать контейнер своего клиента (я предполагаю, что вы используете WebTestCase):
$client = static::createClient(); $container = $client->getContainer();
Если он по-прежнему не работает, попробуйте сохранить сеанс:
$session = $container->get('session'); $session->set('foo', 'bar'); $session->save();
Я не пробовал это в функциональных тестах, но так оно и работает в шагах Behat.
Вы можете получить услугу «сеанс». С помощью этой услуги вы можете:
Код может быть следующим:
use Symfony\Component\BrowserKit\Cookie; .... .... public function testARequestWithSession() { $client = static::createClient(); $session = $client->getContainer()->get('session'); $session->start(); // optional because the ->set() method do the start $session->set('foo', 'bar'); // the session is started here if you do not use the ->start() method $session->save(); // important if you want to persist the params $client->getCookieJar()->set(new Cookie($session->getName(), $session->getId())); // important if you want that the request retrieve the session $client->request( .... ...
Cookie с $ session-> getId () должен быть создан после начала сеанса
См. Документацию http://symfony.com/doc/current/testing/http_authentication.html#creating-the-authentication-token