L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Développement · SKILL.md

laravel-dusk-skill

laravel-dusk-skill

Generates Laravel Dusk browser tests in PHP. Chrome-based E2E testing for Laravel apps. Use when user mentions "Dusk", "Laravel Dusk", "$browser->visit", "DuskTestCase". Triggers on: "Laravel Dusk", "Dusk test", "$browser->visit", "DuskTestCase".

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: laravel-dusk-skill description: > Generates Laravel Dusk browser tests in PHP. Chrome-based E2E testing for Laravel apps. Use when user mentions "Dusk", "Laravel Dusk", "$browser->visit", "DuskTestCase". Triggers on: "Laravel Dusk", "Dusk test", "$browser->visit", "DuskTestCase". languages:

  • PHP category: e2e-testing license: MIT metadata: author: TestMu AI version: "1.0"

Laravel Dusk Skill

For TestMu AI cloud execution, see reference/cloud-integration.md and shared/testmu-cloud-reference.md.

Core Patterns

Basic Test

<?php
namespace Tests\Browser;

use Laravel\Dusk\Browser;
use Tests\DuskTestCase;

class LoginTest extends DuskTestCase
{
    public function testLoginWithValidCredentials(): void
    {
        $this->browse(function (Browser $browser) {
            $browser->visit('/login')
                ->type('email', 'user@test.com')
                ->type('password', 'password123')
                ->press('Login')
                ->assertPathIs('/dashboard')
                ->assertSee('Welcome');
        });
    }

    public function testLoginWithInvalidCredentials(): void
    {
        $this->browse(function (Browser $browser) {
            $browser->visit('/login')
                ->type('email', 'wrong@test.com')
                ->type('password', 'wrong')
                ->press('Login')
                ->assertPathIs('/login')
                ->assertSee('Invalid credentials');
        });
    }
}

Browser Methods

// Navigation
$browser->visit('/path');
$browser->back();
$browser->forward();
$browser->refresh();

// Forms
$browser->type('name', 'value');
$browser->clear('name');
$browser->select('select', 'option');
$browser->check('checkbox');
$browser->uncheck('checkbox');
$browser->radio('radio', 'value');
$browser->attach('file', '/path/to/file');
$browser->press('Button Text');
$browser->click('.selector');

// Assertions
$browser->assertSee('text');
$browser->assertDontSee('text');
$browser->assertPathIs('/expected');
$browser->assertUrlIs('http://full-url');
$browser->assertInputValue('name', 'value');
$browser->assertChecked('checkbox');
$browser->assertVisible('.element');
$browser->assertMissing('.element');
$browser->assertTitle('Page Title');
$browser->assertPresent('.selector');

// Waiting
$browser->waitFor('.element');
$browser->waitFor('.element', 10); // 10 seconds
$browser->waitUntilMissing('.loading');
$browser->waitForText('Loaded');
$browser->waitForLink('Click Me');
$browser->pause(1000); // milliseconds

Page Objects

<?php
namespace Tests\Browser\Pages;

use Laravel\Dusk\Page;

class LoginPage extends Page
{
    public function url(): string { return '/login'; }

    public function assert(Browser $browser): void
    {
        $browser->assertPathIs($this->url());
    }

    public function login(Browser $browser, string $email, string $password): void
    {
        $browser->type('email', $email)
            ->type('password', $password)
            ->press('Login');
    }
}

// Usage
$browser->visit(new LoginPage)
    ->login($browser, 'user@test.com', 'password123');

Cloud: Override DuskTestCase::driver() to return RemoteWebDriver with LT caps

Setup: composer require --dev laravel/dusk && php artisan dusk:install

Cloud Execution on TestMu AI

Set .env variables: LT_USERNAME, LT_ACCESS_KEY

// tests/DuskTestCase.php
protected function driver()
{
    $options = (new ChromeOptions)->addArguments(['--disable-gpu', '--no-sandbox']);
    $ltOptions = [
        'user' => env('LT_USERNAME'),
        'accessKey' => env('LT_ACCESS_KEY'),
        'build' => 'Laravel Dusk Build',
        'name' => $this->getName(),
        'platformName' => 'Windows 11',
        'video' => true,
        'console' => true,
    ];
    $options->setExperimentalOption('LT:Options', $ltOptions);
    return RemoteWebDriver::create(
        'https://hub.lambdatest.com/wd/hub', $options
    );
}

Run: php artisan dusk or php artisan dusk tests/Browser/LoginTest.php

Deep Patterns

See reference/playbook.md for production-grade patterns:

SectionWhat You Get
§1 Project SetupInstallation, DuskTestCase, .env.dusk configuration
§2 Browser TestsLogin flows, forms, multi-step wizards, multiple browsers
§3 Page ObjectsPage class with elements, custom methods, assertions
§4 ComponentsDatePicker, Modal, reusable component pattern
§5 Advanced InteractionsJavaScript, scrolling, drag-and-drop, waiting strategies
§6 Database & DataDatabaseMigrations, factories, screenshots, console logs
§7 LambdaTest IntegrationRemote WebDriver with LT:Options capabilities
§8 CI/CD IntegrationGitHub Actions with MySQL, ChromeDriver, artifact upload
§9 Debugging Table12 common problems with causes and fixes
§10 Best Practices14-item Laravel Dusk testing checklist
Skills enregistrées