Heres step by step what I did to get it working on a new fresh install.
Install fresh copy of Laravel -> laravel new dusk-login
Add test
Run test: error -> Command not found
FIX: Install dusk -> composer require laravel/dusk
Run test: error - .../Browser/screenshots" directory does not exist
FIX: Setup dusk -> php artisan dusk:install
Run test: error -> SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.
FIX: Setup database: edit .env
CHECK: Confirm database is working -> php artisan migrate
Run test: error -> Unable to locate factory with name [default] [emad\User].
FIX: Rename User class for default setup: use emad\User; -> use App\User
Run test: error -> no such element: Unable to locate element: {"method":"css selector","selector":"body textarea[name='email']"}
FIX: Use default template to quickly generate stuff php artisan make:auth
Run test: error -> no such element: Unable to locate element: {"method":"css selector","selector":"body textarea[name='email']"}
CHECK: Visit page in browser: php artisan serve" -> Visit http://127.0.0.1:8000/login
Error: No application encryption key has been specified.
FIX: Set key -> php artisan key:generate -> composer dumpautoload -> restart server
Run test: error -> no such element: Unable to locate element: {"method":"css selector","selector":"body textarea[name='email']"}
FIX: Change .env server correct url APP_URL=http://127.0.0.1:8000
Run test: error -> Unable to locate button [login]
- Default example test now passes
FIX: Update test for case-sensitive button label:
->press('Login')
Run test: Passes ... but ...
Test doesn't actually check for login user so ...
FIX: Update test -> ->assertSee('You are logged in!')->assertSee($user->name)
Run test: Did not see expected text [You are logged in!] within element [body].
FIX: Screenshot directory shows a password mismatch error. Ensure user email / password match
$password = '1qazwsx'; // Our password
$user = factory(User::class)->create([
'email' => '[email protected]',
'password' => bcrypt($password) // Save the encrypted
]);
$this->browse(function ($browser) use ($user, $password) {
$browser->visit('/login')
->type('email', $user->email)
->type('password', $password) // Enter plain password
->press('Login')
->assertPathIs('/')
->assertSee('You are logged in!')
->assertSee($user->name);
});
Run test: pass