Laravelのテストコードでcookieをモックする方法

はじめに

Laravelでテストコードを書く時、HTTPリクエストに含むcookieをモックしたい場合があると思います。そんな時ちょっとひっかかりポイントがあったのでメモ。

環境
  • Laravel 8.x
  • PHPUnit

cookieをモックする

テストコードの書き方やモックについての解説は省略しますm(_ _)m

サンプルコード

以下のようにwithCookies()メソッドを使う。

Laravel公式より抜粋
<?php

namespace Tests\Feature;

use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_interacting_with_cookies()
    {
        $response = $this->withCookie('color', 'blue')->get('/');

        $response = $this->withCookies([
            'color' => 'blue',
            'name' => 'Taylor',
        ])->get('/');
    }
}
参考

注意点

以下のようにcookieメソッドを直接モックすることはできませんでした。

Cookie::shouldReceive('get')
            ->with('color')
            ->andReturn('blue');

あとPOSTリクエストをJSONで送る場合は、以下のようにwithCredentials()メソッドが必要。(使わないとcookieが取得できない)

$response = $this->withCredentials()
        ->withCookies([
            'color' => 'blue',
            'name' => 'Taylor',
            ])->postJson('/', [
            'key' => 'value',
        ]);

まとめ

Laravelは便利なメソッドがたくさんあって便利な反面、知らないとドツボにはまりますね(汗)

このwithCredentials()メソッドについての記述が公式で見つからなかったのですが、どこにあるんだろう???