在laravel测试中设置会话ID

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在laravel测试中设置会话ID相关的知识,希望对你有一定的参考价值。

我正在尝试为http请求编写回归测试。这是一个购物车/结账控制器。

在某些时候,控制器检查是否存在具有等于请求的会话ID的session_id的Cart。有点像Cart::whereSessionId(session()->getId())->first()

不幸的是,请求的会话ID与为实际测试生成的会话ID不同,这意味着即使我使用工厂来创建像这样的购物车:$cart = factory(Cart::class)->create(['session_id' => session()->getId()])它永远不会找到该记录。

那么如何设置请求的会话ID?

答案

这可能接近黑客,但您可以在运行测试时设置会话令牌,如下所示:

$sessionId = session()->getId();
$cart = factory(Cart::class)->create(['session_id' => $sessionId])

$response = $this->withSession(['_token' => $sessionId])
    ->call('GET', action('CartController@method'));

控制器中的会话ID将与测试方法中的会话ID相同。

以上是关于在laravel测试中设置会话ID的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 7:为啥我的会话 cookie 没有在浏览器中设置?

如何在 Laravel 中设置会话超时?

在控制器中设置Laravel会话生存期

Laravel 在会话更改后显示 404

在 Laravel 中设置 PHPUnit 测试

在 laravel 8 中设置单元测试环境