我如何在集成测试中模拟session_id

问题描述 投票:0回答:1

我的一个控制器中有此代码

$this->request->getSession()->id()

我的集成测试之一失败,因为此方法调用未返回任何内容。我在测试设置中尝试了以下操作,但不起作用:

$this->session([
    'id' => 'cb3d42b1-4ea0-44c6-8e29-368e948257eb',
]);

是否有办法使$this->request->getSession()->id()在集成测试设置中返回值?

cakephp cakephp-3.0
1个回答
0
投票

[\Cake\TestSuite\IntegrationTestTrait::session()方法接受为测试请求正在写入会话的值,即会话数据,它将不配置任何其他会话方面,例如ID。

通常,CakePHP的会话类在CLI上运行时,只需通过执行cli即可为会话ID设置$this->id('cli')的值,但是从PHP 7.2开始,当已经生成输出时,它将不再起作用,并且在CakePHP 3.5中,如果已经发送了标头,则CakePHP会主动阻止设置ID,即,您可能无法在测试用例中更改ID。

那么可以你会做什么?好吧,您可以设置一个固定值和set it in your test bootstraptests/bootstrap.php),这也是CakePHP 4.x应用程序模板中默认的测试引导程序现在也可以执行的操作,即只需执行:

session_id('my-custom-id');
© www.soinside.com 2019 - 2024. All rights reserved.