Laravel Dusk에서 로그인 테스트 시 이전 세션이 남아있는 문제 해결하기

by HeuJung


개발 | Posted on Fri, Nov 9, 2018 1:59 AM
2

Laravel Dusk에서 로그인 테스트를 하고자 할 경우 다음과 같이 코드를 작성 할 수 있다.

 

/** @test */
public function 로그인한다()
{
    $this->browse(function (Browser $browser) {
        $browser->visit(route('login'))
            ->type('email', 'myemail@address.com')
            ->type('password', 'password')
            ->press('Login')
            ->assertRouteIs('home');
    });
}

/** @test */
public function 사용자_입력값이_유효하지_않으면_오류난다()
{
    $this->browse(function (Browser $browser) {
        $browser->visit(route('login'))
            ->type('email', 'test@testdomain.com')
            ->type('password', '123456')
            ->press('Login')
            ->assertSee(trans('auth.failed'));
    });
}

 

첫번째 로그인한다()는 정상적으로 작동하지만, 사용자_입력값이_유효하지_않으면_오류난다() 메서드는 오류가 발생한다. 이전 로그인 세션이 남아있기 때문이다.

이를 해결하기 위해서는 DuskTestCase.php에 다음과 같이 setUp() 메서드를 오버라이딩하고, 쿠키 삭제 코드를 추가한다.

 

protected function setUp()
{
    parent::setUp();
    foreach (static::$browsers as $browser) {
        $browser->driver->manage()->deleteAllCookies();
    }
}

 

Laravel Laravel Dusk Testing


Leave a Comment:
김진원 10 months ago Edit Reply
글 잘읽고 갑니다. 개인적으로는 `setUp` 보다는 `tearDown`을 더 활용하고 있습니다. 이유는 `DuskTestCase` 클래스의 테스트가 다른 테스트클래스에 방해되지 않도록 하는 목적이죠.
HeuJung 10 months ago Reply
몰랐던 부분이네요. 소중한 의견 감사합니다. ^^