Laravelのテストコードでcookieをモックする方法
- 2023.12.19
- Laravel
- cookie, Laravel, phpunit, withCookies, withCredentials, テストコード
はじめに
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('/');
}
}
参考
Laravel 8.x HTTPテスト
https://readouble.com/laravel/8.x/ja/http-tests.html
注意点
以下のように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()メソッドについての記述が公式で見つからなかったのですが、どこにあるんだろう???
-
前の記事
LaravelでPDFからテキストを読み取る(pdftotext) 2023.01.29
-
次の記事
LaravelでLINE botを作る最低限の実装方法 2024.01.10
コメントを書く