在Symfony 4测试中,会话在Twig中始终为空

时间:2019-03-28 10:11:20

标签: php symfony twig phpunit symfony4

在将Symfony 3.4升级到Symfony 4.2时,除了在渲染Twig并使用app.session.get('my_session_variable')的控制器上进行的功能测试之外,我都通过了所有单元测试。

使用标准app.sessionsession始终为null

我得到了错误:

Twig\Error\RuntimeError : Impossible to invoke a method ("get") on a null variable.

即使我通过以下方式在测试设置中显式设置了会话,也似乎未设置会话:

$this->client->getContainer()->get('session')->set('my_session_variable', 'help');

代码如下:

测试类:

final class HomepageTest extends WebtestCase
{
    public function setUp(): void
    {
        parent::setUp();

        $this->client = static::createClient();
        $this->router = $this->client->getContainer()->get('router');
    }

    public function testMyPatience(): void
    {
        $url = $this->router->generate('homepage');
        $this->client->request('GET', $url);

        $this->assertSame(200, $this->client->getResponse()->getStatusCode());
    }
}

控制器类:

final class Homepage extends AbstractController
{
    /**
     * @Route("/homepage", name="homepage", methods={"GET"})
     */
    public function index(): Response
    {
        return $this->render('homepage.html.twig');
    }
}

树枝模板:

{% if app.session.get('my_session_variable') != null %}
    <p>Session variable is set</p>
{% endif %}

config / test / framework.yaml:

framework:
  test: true
  session:
    storage_id: session.storage.mock_file

1 个答案:

答案 0 :(得分:0)

对于其他有此问题的人,解决方案是使用:

app.request.session.get('my_session_variable')

代替:

app.session.get('my_session_variable')