在laravel测试中设置会话ID

时间:2017-12-28 11:10:26

标签: laravel session phpunit

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

我知道这个线程已经存在了一段时间,并且对OP毫无帮助,但是我今天遇到了这个问题,以为我会发布我的解决方案,将其添加到您的测试方法中:

for image 0 angle: 0.7416666666666667, pred: [0.7266706]
for image 1 angle: 0.8111111111111111, pred: [0.8449749]
for image 2 angle: 0.7777777777777778, pred: [0.84269005]
for image 3 angle: 0.12222222222222222, pred: [0.14173588]
for image 4 angle: 0.7388888888888889, pred: [0.730219]
for image 5 angle: 0.9694444444444444, pred: [0.9117564]
for image 6 angle: 0.075, pred: [0.07597628]
for image 7 angle: 0.29444444444444445, pred: [0.1829494]
for image 8 angle: 0.10277777777777777, pred: [0.12209181]
for image 9 angle: 0.21388888888888888, pred: [0.31544465]

然后,每当您使用Session::shouldReceive('getId') ->andReturn('my_mocked_session'); 时,它将返回'my_mocked_session'。