[Dusk]Laravel8 Duskで自動的にブラウザのセッションをクリアする

Laravel ロゴ

Laravel8 Duskでは、テストが変わってもブラウザの状態が引き継がれてしまいます。
テストが変わってログイン中の状態を引き継いでほしくないなど、いちいち気にしないと行けないのは面倒過ぎます。逆に、簡略化のために引き継いでほしいということもあります。

この辺りを自動でなんとかするコードを書いてみました。


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;
}
}
PHPフレームワークLaravel入門 第2版
■人気No. 1 PHPフレームワークのロングセラー定番解説書が、新バージョン対応で改訂! ■PHPでWebアプリケーションを開発するフレームワークには種々ありますが、圧倒的人気ナンバーワンはLaravel(ララベル)! 本書は、2017年9月の刊行以来大好評を博している『PHPフレームワークLaravel入門』を、2...

setAutoDeleteSessions()メソッドで自動クリアを有効にするか設定できます。デフォルトはクリアするになっていますのでクリアしたくない場合は各テストクラスの tearUp()メソッドでこのメソッドを呼んで設定すると良いでしょう。
任意のタイミングで手動でクリアしたい場合もあると思いますのでdeleteBrowserSessions()もつけました。

タイトルとURLをコピーしました