この記事の目次
chevron_right
LaravelではCookieは暗号化されている
chevron_right
Cookieの暗号化をデコード(復号化)する
chevron_right
Controllerテストを書く
chevron_right
全体のコード
chevron_right
参考にさせていただいた記事
Laravel6で、PHP Unitを利用したテスト中にCookieを利用したい場合、
少しテクニックが必要なようだ。
なお、以下に出てくるコードはすべて同じファイルの中に書いています。
LaravelではCookieは暗号化されている
この前提知識が大事です。
LaravelではCookie情報は暗号化されて書き込んでいるので、
テストの段階ではすでに暗号化されていて取得することができません。
Cookieの暗号化をデコード(復号化)する
まずデコードのコードを作ってあげます。
とあるQiitaの記事では、disableCookiesEncryption
というものが紹介されていますが、
Laravel6にはないようなので自作しないといけないみたいです。
なので自作します。
use IlluminateCookieMiddlewareEncryptCookies;
/**
* @param $name
* @return $this
*/
protected function disableCookiesEncryption($name)
{
$this->app->resolving(EncryptCookies::class,
function ($object) use ($name)
{
$object->disableFor($name);
});
return $this;
}
まずこいつ。disableCookiesEncryption
メソッドです。
こいつを使います。
Controllerテストを書く
public function コントローラーテスト()
{
// 上で定義したdisableCookiesEncryptionメソッド
$this->disableCookiesEncryption(['セットしたいクッキー名']);
// Cookieの値もセットするために、callメソッドを使ってリクエストする
$response = $this->call('「GET」 or 「POST」', 'URL', [], ['セットしたいクッキー名' => 'セットしたいクッキーの値']);
$response->assertStatus(200);
}
こんな感じになります。
全体のコード
<?php
namespace TestsFeature;
use IlluminateFoundationTestingTestResponse;
use IlluminateHttpRequest;
use IlluminateSupportFacadesCookie;
use TestsTestCase;
use IlluminateFoundationTestingWithFaker;
use IlluminateFoundationTestingRefreshDatabase;
use IlluminateCookieMiddlewareEncryptCookies;
class SampleControllerTest extends TestCase
{
/**
* @param $name
* @return $this
*/
protected function disableCookiesEncryption($name)
{
$this->app->resolving(EncryptCookies::class,
function ($object) use ($name)
{
$object->disableFor($name);
});
return $this;
}
/**
* DocComment
*
* @test
* @return void
*/
public function コントローラーテスト()
{
// 上で定義したdisableCookiesEncryptionメソッド
$this->disableCookiesEncryption(['セットしたいクッキー名']);
// Cookieの値もセットするために、callメソッドを使ってリクエストする
$response = $this->call('「GET」 or 「POST」', 'URL', [], ['セットしたいクッキー名' => 'セットしたいクッキーの値']);
$response->assertStatus(200);
}
}
参考にさせていただいた記事
この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。