Laravel8 Duskでは、テストが変わってもブラウザの状態が引き継がれてしまいます。
テストが変わってログイン中の状態を引き継いでほしくないなど、いちいち気にしないと行けないのは面倒過ぎます。逆に、簡略化のために引き継いでほしいということもあります。
この辺りを自動でなんとかするコードを書いてみました。
PHPフレームワーク Laravel実践開発
アプリケーション開発には、基本のMVC以外の機能実装が非常に重要になります。本書は、既刊『PHPフレームワーク Laravel入門』を読み終わった方に向けて、もっと知りたいという要望の高かったMVC以外の機能実装の手法を解説します。コア機能...
test/DuskTestCase.phpに幾つかのメソッドを追加します。
下記は追記したコードのみの抜粋です。
abstract class DuskTestCase extends BaseTestCase
{
// テストごとにセッションを削除するか?
private bool $autoDeleteSessions = true;
/**
* テスト実行前のクリーンアップ処理
*/
public function tearUp(): void
{
parent::tearUp();
if($this->autoDeleteSessions) {
$this->deleteBrowserSessions();
}
}
/**
* 次のテスト実行前のクリーンアップ処理
*/
public function tearDown(): void
{
parent::tearDown();
if($this->autoDeleteSessions) {
$this->deleteBrowserSessions();
}
}
/**
* ブラウザのセッションをクリア
*/
public function deleteBrowserSessions(): void
{
foreach (static::$browsers as $browser) {
$browser->driver->manage()->deleteAllCookies();
}
}
/**
* テストごとにブラウザセッションを削除するかどうか設定
*/
public function setAutoDeleteSessions(bool $flag): void
{
$this->autoDeleteSessions = $flag;
}
}
Amazon.co.jp
setAutoDeleteSessions()
メソッドで自動クリアを有効にするか設定できます。デフォルトはクリアするになっていますのでクリアしたくない場合は各テストクラスの tearUp()
メソッドでこのメソッドを呼んで設定すると良いでしょう。
任意のタイミングで手動でクリアしたい場合もあると思いますのでdeleteBrowserSessions()
もつけました。