如何使用Symfony模拟phpunit中的会话变量

时间:2018-11-30 20:49:03

标签: symfony session mocking twig phpunit

我正在为PHP / Symfony / Twig软件进行功能测试。

我正在尝试在模拟的PHP会话中包含一个变量,以进行PHPUnit功能测试。我希望我的树枝模板能够像这样在模拟会话中读取var:

{{ session.myvar }}

所以我最初是这样尝试的:

$client = static::createClient();
$sessionMock = new Session(new MockFileSessionStorage());
$sessionMock->set("myvar", 123);
$client->getContainer()->set('session', $sessionMock);
$crawler = $client->request('GET', '/');
$this->assertEquals(200, $client->getResponse()->getStatusCode());        
从请求中得到500个结果。因此,我加入了var_dump(trim($crawler->text()));并使用--verbose运行测试。那显示了我的错误:

Key "myvar" does not exist as the array is empty. (500 Internal Server Error).

所以我尝试通过其他方式设置myvar:

 $client->getContainer()->get('session')->set('myvar', 123);
 $client->getContainer()->set('myvar', 123);
 $sessionMock->myvar = 123;

他们都没有帮助。我试图像这样在模板中转储会话:

{% dump(session) %}

其中已将::base.html.twig on line 120: []转储到控制台

如果我要进行$ mockedSession:

var_dump($sessionMock); // result: Session object with a subvar with 123 value due to $sessionMock->myvar = 123
var_dump($sessionMock->get('myvar')); // result: 123

我在$ sessionMock对象中得到一个带有123值的子变量。

如果我删除模板中的{{session.myvar}}标签,则测试正常。

任何人都知道如何在模拟会话中正确设置var?谢谢。

0 个答案:

没有答案