LaravelのDuskテストでログインテストでセッションが生きててハマったお話

複数のテストを1ファイルに書いている場合、そのファイル中はセッションが生きているっぽい

なので、setUp とかで logout() してやらないといけないっぽい

以下の例では admin という guard からログアウトしています

なお、なぜか tearDown で動かなかった(未検証)

<?php

class LoginTest extends DuskTestCase
{
    use DatabaseMigrations;

    protected function setUp()
    {
        parent::setUp();

        try {
            $this->browse(function (Browser $browser) {
                $browser->logout('admin');
            });
        } catch (\Throwable $e) {
            echo $e->getMessage() . "\n";
        }
    }

    // ログインするテスト

    /**
     * 
     * @return void
     * @throws \Throwable
     */
    public function testRedirectAfterLogin()
    {
        $admin = factory(Admin::class)->create();

        $this->browse(function (Browser $browser) use ($admin) {

            $browser->visit('/admin/articles')
                ->assertPathIs('/admin/login')  // ここが動かなかった!
                ->type('email', $admin->email)
                ->type('password', 'secret')
                ->click('@login')
                ->assertPathIs('/admin/articles');
        });

    }
}