Laravel DuskでE2Eテスト(ページアクセス編)

2025.08.19 09:00
2025.08.18 15:18
Laravel DuskでE2Eテスト(ページアクセス編)

以前にも Dusk を使ったページアクセス確認を書きましたが、Laravel や PHPUnit のバージョンアップで書き方が少し変わってきたので、改めてまとめてみました。
「ページにアクセスできるか」「想定した画面にたどり着けているか」をテストするのは、E2Eテストの最初の一歩としてよく使うパターンだと思います。今回はその中でも最も基本的な『ページにアクセスできるかどうかの確認』を、最新の記法でまとめ直しました。

ページにアクセスできるかのテスト

実際にページにアクセスして、body タグに「Home」「Index」の2つのクラスがあるかどうかを確認する例です。
これは、ページ判別用に Laravelのクラス名とアクション名を body に出す 実装をしているので、その値が正しく反映されているかでページアクセスの成否を判断しています。

#[Test]
public function flow_ja_response(): void
{
    $this->browse(function (Browser $browser) {

        // アクセス
        $browser->visit('/');

        // 要素取得
        $element = $browser->driver->findElement(\Facebook\WebDriver\WebDriverBy::cssSelector('body'));
        $class = $element->getAttribute('class');
        $classes = explode(' ', $class);

        // チェック
        Assert::assertContains('Home', $classes);
        Assert::assertContains('Index', $classes);
    });
}

パスで確認する方法

もっとシンプルに「URL が期待通りか」で判定する方法もあります。

#[Test]
public function flow_ja_response(): void
{
    $this->browse(function (Browser $browser) {

        // アクセス
        $browser
            ->visit('/test')
            ->assertPathIs('/test'); // 正確に一致する必要がある
    });
}

シンプルで簡単ですね。
ただ、assertPathIsは完全一致なので、部分一致ならこっちを使うのもありです。

#[Test]
public function flow_ja_response(): void
{
    $this->browse(function (Browser $browser) {

        // アクセス
        $browser
            ->visit('/test')
            ->assertPathBeginsWith('/test'); // 部分一致でOK
    });
}

こちらのほうが柔軟性はありますね。

注意点

前回の記事でも触れましたが、#[Test] アトリビュートを使うには以下の use が必要です。

use PHPUnit\Framework\Attributes\Test;

まとめ

今回はシンプルに「ページアクセス確認」のテストを書いてみました。
実際のプロジェクトでは「ページが開ける」ことをまずテストで担保してから、次にフォーム入力や遷移などの流れを確認していくのが自然なステップだと思います。

次回はフォーム入力テストをやってみます!

今回は以上です!