я использую "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 разные?
Как написано Вот:
Я думаю, что главная ошибка здесь — забывать, что
$this->container
это не то же самое, что$client->getContainer()
: клиент запускает полностью отдельный новый контейнер, и в зависимости от того, как вы используете сеанс, вы не можете найти один и тот же материал в обоих из них.
Поэтому, когда вы звоните $this->container->get('session')->set('test', 2)
Вы не меняете фактическую сессию теста.
Так что это может сработать, если вы позвоните клиенту контейнера:
$client = $this->makeClient();
$client->getContainer()->set('test', 2);
$crawler = $client->request('GET', '/contact');
Или, чтобы обойти эту проблему, вы можете написать тест, который не полагается на настройку сеанса напрямую, а вместо этого выполняет те же действия, что и пользователи, чтобы заполнить сеанс и вызвать контроллер, который его использует.
Других решений пока нет …