Symfony 2 - 在单元测试期间将会话数据添加到请求对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony 2 - 在单元测试期间将会话数据添加到请求对象相关的知识,希望对你有一定的参考价值。

我正在尝试为我的REST API设置一些测试,我需要在请求对象中设置一个会话变量。通常的方法似乎不起作用。

$session = $request->getSession();              
$session->set('my_session_variable', 'myvar');
答案

你应该使用WebTestCase

然后你可以做类似问题的答案中描述的事情:how-can-i-persist-data-with-symfony2s-session-service-during-a-functional-test

像这样的东西:

$client = static::createClient();
$container = $client->getContainer();
$session = $container->get('session');
$session->set('name', 'Sensorario');
$session->save();
另一答案

如果使用WebTestCase,则可以检索“会话”服务。有了这项服务,您可以:

  • 开始会议,
  • 将一些参数设置为session,
  • 保存会话,
  • 将带有sessionId的Cookie传递给请求

代码可以是以下内容:

use SymfonyComponentBrowserKitCookie;
....
....
public function testARequestWithSession()
{
    $client = static::createClient();
    $session = $client->getContainer()->get('session');
    $session->start(); // optional because the ->set() method do the start
    $session->set('my_session_variable', 'myvar'); // the session is started  here if you do not use the ->start() method
    $session->save(); // important if you want to persist the params
    $client->getCookieJar()->set(new Cookie($session->getName(), $session->getId()));  // important if you want that the request retrieve the session

    $client->request( .... ...
另一答案

一个简短的片段,用于在会话中设置一些值

$session = $this->client->getRequest()->getSession();
$session->set('name', 'Sensorario');

这是一个非常简单的例子来获得这个价值

echo $session->get('name');

以上是关于Symfony 2 - 在单元测试期间将会话数据添加到请求对象的主要内容,如果未能解决你的问题,请参考以下文章

在会话中存储对象 Symfony 2

带有 CSRF 令牌和会话的 Symfony 4 功能形式测试

Symfony 功能测试和会话持久性

通过单元测试访问 Symfony 2 容器?

Symfony4 学说单元测试:实体在缓存中有旧数据?

如何使用 Symfony 2 在单元测试中获取当前登录的用户?