如何在集成测试中模拟session_id

时间:2019-11-28 15:42:06

标签: cakephp cakephp-3.0

我在其中一个控制器中有此代码

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

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

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

是否有一种方法可以使$this->request->getSession()->id()在集成测试设置中返回一个值?

1 个答案:

答案 0 :(得分: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');