2

我使用"liip/functional-test-bundle": "~1.8",and"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');

variable $testequal 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 不同?

4

1 回答 1

0

如此处所写:

我认为这里的主要错误是忘记$this->container了与以下内容不同$client->getContainer():客户端旋转了一个完全分离的新容器,并且根据您使用会话的方式,您可能在它们中都找不到相同的东西。

因此,当您打电话时,$this->container->get('session')->set('test', 2)您不会更改测试的实际会话。


因此,如果您调用容器的客户端,它可能会起作用:

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

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

于 2018-05-03T11:56:13.913 回答