🙌
Laravelでsession IDを固定したHTTPテスト
LaravelでControllerのテスト書くときに
$this->actingAs($user)->getJson(...)
みたいな感じでHTTPリクエストのテスト書くことがあるけど、セッションIDは固定されない。
セッションIDを意識することなんて基本的にはないんだけど、生きてると極稀にセッションIDを固定したいことがある。
そんなときはこんな感じで固定できるよ、という話。
※Cookie sessionの場合だから他の場合は適当に応用してください。
private array $sessionCookies = [];
protected function setUp(): void
{
parent::setUp();
$this->sessionCookies = [session()->getName() => session()->getId()];
}
public function 何らかのテストケース(): void {
// ...
$this->actingAs($user)
->withCredentials()
->withCookies($this->sessionCookies)
->getJson(...)
// ...
}
->withCookies()
に対してsessionIDを含んだCookieの情報を渡すとそれが StartSession
あたりで $request->cookies
から展開されて拾われるので、それを利用してセッションIDを固定してる感じ。
->withCookies()
をJSONリクエストで使う場合は ->withCredentials()
が必要なので注意。
Discussion