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
コメントを書く