cakephp - 如何在集成测试中模拟 session_id
问题描述
我的一个控制器中有此代码
$this->request->getSession()->id()
我的一个集成测试失败了,因为这个方法调用没有返回任何东西。我在我的测试设置中尝试了以下方法,但它不起作用:
$this->session([
'id' => 'cb3d42b1-4ea0-44c6-8e29-368e948257eb',
]);
有没有办法$this->request->getSession()->id()
在集成测试设置中返回一个值?
解决方案
该\Cake\TestSuite\IntegrationTestTrait::session()
方法接受为测试请求写入会话的值,即会话数据,它不会配置任何其他会话方面,如 ID。
cli
通常 CakePHP 的 session 类会在 CLI 上运行时为 session id设置一个值,只需简单地做$this->id('cli')
,但从 PHP 7.2 开始,当已经生成输出时将不再工作,同样从 CakePHP 3.5 开始,CakePHP 主动阻止设置ID 以防标头已发送,即您可能无法更改测试用例中的 ID。
那么你能做什么呢?好吧,您可以选择一个固定值并将其设置在您的测试引导程序( tests/bootstrap.php
) 中,这也是 CakePHP 4.x 应用程序模板中的默认测试引导程序现在所做的,即只需执行以下操作:
session_id('my-custom-id');
推荐阅读
- ios - 无法在 WKwebview 中加载重定向的 URL(登录 URL)
- c# - IndexOf 上的 Linq To SQL 性能
- amazon-web-services - 如何在 YARN 中优化设置火花驱动器属性
- assembly - 我可以使用程序集打开服务器吗,如果可以的话,我需要知道哪些基本命令以及如何知道
- scripting - 使用 3ds Max 和 maxscript 将 Alpha 通道渲染为 RGBA .jpg 文件
- sed - 如何将 sed 命令的输出重定向到文件
- mysql - 错误 2002 (HY000): 无法通过套接字连接到本地 MySQL 服务器 '' (111 "连接被拒绝")
- prolog - 在 Prolog 中解析列表列表
- mongodb - 在 mongodb 文档内的数组中获取具有特定值的文档
- java - 解释器设计功能问题(eclipse)