Was ist Laravel Dusk
Laravel Dusk ist ein E2E-Testwerkzeug, das den Browser tatsächlich steuert und den gesamten Bildschirm prüft.
Standardmäßig können Sie Tests ohne separaten Selenium-Server direkt mit ChromeDriver ausführen.
Die offizielle Dokumentation empfiehlt für neue Projekte auch die Browser-Tests von Pest 4. Diese Seite ist hilfreich, wenn Sie in bestehenden Projekten Dusk nutzen oder gezielt die Dusk-API verwenden möchten.
Installation
Installieren Sie zuerst Google Chrome und dann Dusk als Dev-Abhängigkeit.
composer require laravel/dusk --dev
php artisan dusk:install
Zum Anpassen der ChromeDriver-Version:
# Passende Version zum lokalen Chrome ermitteln und installieren
php artisan dusk:chrome-driver --detect
Umgebung (.env.dusk.local)
Für Dusk-spezifische Umgebungsvariablen legen Sie im Projekt-Root eine .env.dusk.{environment} an.
Lokal also .env.dusk.local.
APP_URL =http://127.0.0.1:8000
DB_CONNECTION =mysql
DB_DATABASE =app_testing
DB_USERNAME =root
DB_PASSWORD =root
Während des Dusk-Laufs wird .env gesichert und der Inhalt der .env.dusk.local temporär angewendet.
Einfacher Browser-Test
Test erzeugen und mit php artisan dusk starten.
php artisan dusk:make LoginTest
php artisan dusk
Nur fehlgeschlagene Tests wiederholen:
Beispiel
<? php
namespace Tests\Browser ;
use App\Models\ User ;
use Laravel\Dusk\ Browser ;
use Tests\ DuskTestCase ;
class LoginTest extends DuskTestCase
{
public function test_user_can_login () : void
{
$user = User :: factory () -> create ([
'email' => '[email protected] ' ,
]);
$this -> browse ( function ( Browser $browser ) use ( $user ) {
$browser -> visit ( '/login' )
-> type ( 'email' , $user -> email )
-> type ( 'password' , 'password' )
-> press ( 'Login' )
-> assertPathIs ( '/dashboard' )
-> assertSee ( 'Dashboard' );
});
}
}
Die häufigsten Aktionen: visit(), type(), press(), assertSee().
In Dusk-Tests verwendet man nicht RefreshDatabase. Verwenden Sie wie in der offiziellen Doku beschrieben DatabaseMigrations oder DatabaseTruncation, um Daten zwischen Tests zurückzusetzen.
Page-Object-Muster
Für komplexe Seiten erleichtert dusk:page das Wartungsprofil.
php artisan dusk:page Login
In tests/Browser/Pages/Login.php definieren Sie url() und elements(), die Sie in Tests wiederverwenden.
use Tests\Browser\Pages\ Login ;
$browser -> visit ( new Login )
-> type ( '@email' , '[email protected] ' )
-> type ( '@password' , 'password' )
-> click ( '@submit' )
-> assertSee ( 'Dashboard' );
Screenshots und Debugging
Für die Fehlersuche sind Screenshots und Konsolen-Logs wertvoll.
$browser -> screenshot ( 'login-failed' );
$browser -> responsiveScreenshots ( 'login-page' );
$browser -> screenshotElement ( '#login-form' , 'login-form' );
$browser -> storeConsoleLog ( 'login-console' );
Screenshots: tests/Browser/screenshots
Konsolen-Logs: tests/Browser/console
Ausführung in CI (GitHub Actions)
Starten Sie in GitHub Actions ChromeDriver und den Laravel-Server, dann php artisan dusk.
name : Dusk tests
on : [ push , pull_request ]
jobs :
dusk :
runs-on : ubuntu-latest
env :
APP_URL : http://127.0.0.1:8000
DB_USERNAME : root
DB_PASSWORD : root
MAIL_MAILER : log
steps :
- uses : actions/checkout@v5
- run : cp .env.example .env
- run : composer install --no-progress --prefer-dist --optimize-autoloader
- run : php artisan key:generate
- run : php artisan dusk:chrome-driver --detect
- run : ./vendor/laravel/dusk/bin/chromedriver-linux --port=9515 &
- run : php artisan serve --no-reload &
- run : php artisan dusk
Dusk-Ausführungsablauf
Offizielle Dokumentation
Laravel Dusk — Offizielle Doku Details zu allen APIs (Warten, Assertions, Tastatur, iframes u. a.) finden Sie in der offiziellen Dokumentation.
Zuletzt geändert am 13. Juli 2026