I am getting started using Laravel Dusk for browser testing, and have created a couple of tests to test my login form. I have the following code:
class LoginTest extends DuskTestCase
{
public function testLogin()
{
    $this->browse(function (Browser $browser) {
        $browser->visit('/admin')
            ->type('email', 'inigo@mydomain.co.uk')
            ->type('password', 'MyPass')
            ->press('Login')
            ->assertSee('Loading...');
    });
}
public function testLoginFailure(){
    $this->browse(function (Browser $browser){
        $browser->visit('/admin/logout'); // I have to add this to logout first, otherwise it's already logged in for this test!
        $browser->visit('/admin')
            ->type('email', 'someemail@afakedomain.com')
            ->type('password', 'somefakepasswordthatdoesntwork')
            ->press('Login')
            ->assertSee('These credentials do not match our records.');
    });
}
See the comment. The first function runs fine, but when it comes to the second function, I have to logout first, since the user is already logged in as a result of running the first function. This came as a surprise to me as I thought unit tests were completely independent, with session data being destroyed automatically.
Is there a better way of doing this- some Dusk method that I'm missing perhaps- than having to call $browser->visit('/admin/logout'); ?
Thanks
EDIT Thanks for the 2 answers so far, which both seem valid solutions. I've updated the second function to the following:
public function testLoginFailure(){
    $this->createBrowsersFor(function(Browser $browser){
        $browser->visit('/admin')
            ->type('email', 'someshit@afakedomain.com')
            ->type('password', 'somefakepasswordthatdoesntwork')
            ->press('Login')
            ->assertSee('These credentials do not match our records.');
    });
}
Which does the job. So
- I can safely assume that this second browser only exists for the duration of this single function, correct?
- What are the obvious advantages/disadvantages of creating a second browser instance rather than using the teardown method?
 
     
     
     
     
     
     
     
     
    