Как установить некоторые данные в сессии в функциональном тесте?

я использую "liip/functional-test-bundle": "~1.8", а также "symfony/symfony": "~3.4", и для моего функционального теста я хочу установить некоторые данные в сеансе, но после ввода данных в действие, с тем же ключом, у меня был ноль. Mytest класс простирается от extends WebTestCase

это как я устанавливаю данные в тестовом методе

    $session = $this->container->get('session');
$session->set('test', 2);

$this->getClient()->request(
Request::METHOD_GET,
$routing
);

config_test.yml

framework:
test: ~
session:
storage_id: session.storage.mock_file
name: "MOCKSESSID"profiler:
collect: false

и в действии

public function getEntityAction()
{
$test = $this->get('session')->get('test');

переменная $test равно нулю
Как установить некоторые данные в сессии в функциональном тесте?

при отладке, перед запросом

session = {Symfony\Component\HttpFoundation\Session\Session} [5]
storage = {Symfony\Component\HttpFoundation\Session\Storage\MockFileSessionStorage} [8]
savePath = "/tmp"id = "d5d7233a843594e94c42b6a0e5a14a86c2518fb5f0a6478732841547b3e93fd6"name = "MOCKSESSID"started = true
closed = false
data = {array} [3]
_sf2_attributes = {array} [1]
test = 2

и в действии

$y = {Symfony\Component\HttpFoundation\Session\Session} [5]
storage ={Symfony\Component\HttpFoundation\Session\Storage\MockFileSessionStorage} [8]
savePath = "/home/ivan/hosts/fix/var/cache/test/sessions"id = "5ade2581b9764"name = "MOCKSESSID"started = true
closed = false
data = {array} [3]
_sf2_attributes = {array} [1]
_security_main = "authuser data"

Я не понимаю, почему id и savePath разные?

2

Решение

Как написано Вот:

Я думаю, что главная ошибка здесь — забывать, что $this->container это не то же самое, что $client->getContainer(): клиент запускает полностью отдельный новый контейнер, и в зависимости от того, как вы используете сеанс, вы не можете найти один и тот же материал в обоих из них.

Поэтому, когда вы звоните $this->container->get('session')->set('test', 2) Вы не меняете фактическую сессию теста.


Так что это может сработать, если вы позвоните клиенту контейнера:

$client = $this->makeClient();
$client->getContainer()->set('test', 2);
$crawler = $client->request('GET', '/contact');

Или, чтобы обойти эту проблему, вы можете написать тест, который не полагается на настройку сеанса напрямую, а вместо этого выполняет те же действия, что и пользователи, чтобы заполнить сеанс и вызвать контроллер, который его использует.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]