我使用"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不同?
答案 0 :(得分:0)
我认为这里的主要错误是忘记了
$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.
或者,为了避免这个问题,您可以编写一个不依赖于直接设置会话的测试,而是执行与用户相同的操作,以便填充会话并调用控制器用它。