我在其中一个控制器中有此代码
$this->request->getSession()->id()
我的集成测试之一失败,因为此方法调用未返回任何内容。我在测试设置中尝试了以下操作,但不起作用:
$this->session([
'id' => 'cb3d42b1-4ea0-44c6-8e29-368e948257eb',
]);
是否有一种方法可以使$this->request->getSession()->id()
在集成测试设置中返回一个值?
答案 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 bootstrap(tests/bootstrap.php
),这就是CakePHP 4.x应用程序模板中默认的测试引导程序现在也可以执行的操作,即:
session_id('my-custom-id');