【问题标题】:Symfony2 functional test session persistenceSymfony2 功能测试会话持久化
【发布时间】:2014-11-17 15:32:17
【问题描述】:

我正在尝试在 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
    }
}

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

有人可以帮我吗?谢谢。

【问题讨论】:

  • 在签入会话之前,我建议您使用$this-&gt;assertEquals(302, $client-&gt;getResponse()-&gt;getStatusCode(), "correct response code");检查操作是否成功

标签: php symfony session testing


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!作为一个功能测试的新手,我也想听听你关于“做我正在做的事情是否有意义”的建议:-)。
  • 我的意思是你可以提取将会话数据持久化到一个单独的类中的逻辑,并使用单元测试来测试这个类。但是,如果会话处理、表单处理或任何更改以及您的单独类中的代码不再被调用,您将只能通过功能测试来识别这一点。所以从我的角度来看,功能测试非常适合这种情况。
  • 请将链接中的相关代码添加到blockquote中。
猜你喜欢
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多