如何在功能测试中设置会话中的一些数据?

时间:2018-04-23 18:09:21

标签: php symfony liipfunctionaltestbundle

我使用"liip/functional-test-bundle": "~1.8","symfony/symfony": "~3.4",并且对于我的功能测试,我想在会话中设置一些数据,但是在使用相同的键设置数据后,我得到了null。 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等于null 如何在功能测试中设置会话中的一些数据?

调试时,在请求之前

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不同?

1 个答案:

答案 0 :(得分:0)

正如enter image description here所写:

  

我认为这里的主要错误是忘记了$client->getContainer()$this->container->get('session')->set('test', 2)不同:客户端会分离一个完全分离的新容器,并且根据您使用会话的方式,您可能不会在两者中找到相同的东西。

因此,当您拨打$client = $this->makeClient(); $client->getContainer()->set('test', 2); $crawler = $client->request('GET', '/contact'); 时,您不会更改测试的实际会话。

因此,如果您呼叫容器的客户端,它可能会有效:

Exit, Fast, HSDir, Running,Stable,V2Dir, Valid.

或者,为了避免这个问题,您可以编写一个不依赖于直接设置会话的测试,而是执行与用户相同的操作,以便填充会话并调用控制器用它。