Как мне сохранить данные с помощью службы сеансов Symfony2 во время функционального тестирования? - PullRequest
4 голосов
/ 08 марта 2012

Я пишу функциональный тест для действия, которое использует сервис сеанса Symfony2 для извлечения данных.В моем тестовом классе setUp я вызываю $this->get('session')->set('foo', 'bar');.Если я выведу все данные сеанса (используя print_r($this->get('session')->all());) либо в setUp, либо в реальном методе тестирования, я получу обратно foo => bar.Но если я попытаюсь вывести данные сеанса из тестируемого действия, я получу пустой массив.Кто-нибудь знает, почему это происходит, и как я могу это предотвратить?

Я должен заметить, что если я позвоню $_SESSION['foo'] = 'bar' из setUp(), данные сохранятся, и я смогу получить к ним доступ из действия - эта проблема кажется локальной для службы сеансов Symfony2.

Ответы [ 2 ]

7 голосов
/ 09 марта 2012

Сначала попробуйте использовать контейнер вашего клиента (я предполагаю, что вы используете WebTestCase):

$client = static::createClient();
$container = $client->getContainer();

Если он все еще не работает, попробуйте сохранить сеанс:

$session = $container->get('session');
$session->set('foo', 'bar');
$session->save();

Я не пробовал это в функциональных тестах, но вот как это работает на этапах Behat.

0 голосов
/ 25 сентября 2017

Вы можете получить услугу «сеанс».С помощью этой службы вы можете:

  • начать сеанс,
  • установить некоторые параметры в сеансе,
  • сохранить сеанс,
  • передатьФайл cookie с sessionId для запроса

Код может быть следующим:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...