我如何在集成测试中模拟 session_id
how do I mock a session_id in my integration test
我的一个控制器中有此代码
$this->request->getSession()->id()
我的一个集成测试失败了,因为这个方法调用没有 returning 任何东西。我在我的测试设置中尝试了以下方法,但它不起作用:
$this->session([
'id' => 'cb3d42b1-4ea0-44c6-8e29-368e948257eb',
]);
有没有办法让 $this->request->getSession()->id()
return 成为集成测试设置中的一个值?
\Cake\TestSuite\IntegrationTestTrait::session()
方法接受写入 session 测试请求的值,即 session 数据,它不会配置任何其他 session 方面喜欢ID.
通常 CakePHP 的 session class 会在 运行 上为 session id 设置值 cli
CLI,只需执行 $this->id('cli')
,但从 PHP 7.2 开始,当已经生成输出时,它将不再工作,同样从 CakePHP 3.5 开始,CakePHP 积极防止在 headers 已经发送的情况下设置 ID,即您可能无法在测试用例中更改 ID。
那么可以做什么?好吧,你可以接受一个固定值和 set it in your test bootstrap (tests/bootstrap.php
),这就是现在 CakePHP 4.x 应用程序模板中的默认测试 bootstrap也这样做,即简单地做:
session_id('my-custom-id');
我的一个控制器中有此代码
$this->request->getSession()->id()
我的一个集成测试失败了,因为这个方法调用没有 returning 任何东西。我在我的测试设置中尝试了以下方法,但它不起作用:
$this->session([
'id' => 'cb3d42b1-4ea0-44c6-8e29-368e948257eb',
]);
有没有办法让 $this->request->getSession()->id()
return 成为集成测试设置中的一个值?
\Cake\TestSuite\IntegrationTestTrait::session()
方法接受写入 session 测试请求的值,即 session 数据,它不会配置任何其他 session 方面喜欢ID.
通常 CakePHP 的 session class 会在 运行 上为 session id 设置值 cli
CLI,只需执行 $this->id('cli')
,但从 PHP 7.2 开始,当已经生成输出时,它将不再工作,同样从 CakePHP 3.5 开始,CakePHP 积极防止在 headers 已经发送的情况下设置 ID,即您可能无法在测试用例中更改 ID。
那么可以做什么?好吧,你可以接受一个固定值和 set it in your test bootstrap (tests/bootstrap.php
),这就是现在 CakePHP 4.x 应用程序模板中的默认测试 bootstrap也这样做,即简单地做:
session_id('my-custom-id');