Symfony2功能测试会话持久性

时间:2014-09-23 12:15:15

标签: php symfony session testing

我试图在Symfony中尝试一下功能测试,我目前面临着我的会话问题。我执行了一段似乎正常工作的代码,但没有任何内容存储在我的容器会话中。

我有一个用于设置数据的表单。提交时,它会检查值并将其存储在会话中。然后它重定向到另一个页面,其中需要存储在会话中的这些值。

我的测试目的是检查会话。

<?php

namespace Acme\TestBundle\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\HttpFoundation\Session\Storage\MockFileSessionStorage;
use Symfony\Component\HttpFoundation\Session\Session;

class FrontControllerTest extends WebTestCase
{
    public function testForm()
    {
        $client = static::createClient();
        $session = $client->getContainer()->get('session');

        $crawler = $client->request('GET', '/setParameters');

        $form = $crawler->selectButton('Submit')->form();
        $form['myForm[firstname]']->setValue('Ben');
        $form['myForm[lastname]']->setValue('H');

        $client->submit($form);

        //I tested and my controller is fully going through the submit handler
        //which check the values and save it into the session
        //Things are 100% sure there. Then it redirects to another page which check those values.

        $values = $client->getContainer()->get('session')->get('parameters'); //NULL
        $this->assertEquals($values['firstname'], 'Ben'); //false
        $this->assertEquals($values['lastname'], 'H'); //false
    }
}

实际上它根本不起作用,似乎我无法在会话中存储任何东西并检索它。

有人可以帮助我吗?感谢&#39; S

1 个答案:

答案 0 :(得分:2)

您在测试中使用的容器不是您触发的请求所使用的容器。 Symfony为每个请求创建新容器。因此,您无法通过容器直接访问会话。

另见http://alexandre-salome.fr/blog/Symfony2-Isolation-Of-Tests

一种可能的解决方案是从您的cookie中提取会话ID,然后从会话存储中读取会话。