LARAVEL DUSK: PRUEBAS END-TO-END EN LARAVEL DE FORMA SENCILLA

Laravel Dusk es la herramienta oficial de Laravel para realizar pruebas de navegador o Browser Testing y automatización. Permite simular el comportamiento real de un usuario dentro del navegador, interactuando con JavaScript, formularios, animaciones y todo lo que sucede en el frontend.
A diferencia de pruebas unitarias o de feature tradicionales, Dusk abre un navegador real (Chrome por defecto) y ejecuta las acciones como lo haría una persona.

¿Por qué usar Laravel Dusk?

  • Realiza pruebas end-to-end completas.
  • Ideal para aplicaciones con mucho JavaScript (Vue, Livewire, Alpine, React, etc.).
  • Fácil de leer y escribir (API fluida y expresiva).
  • No requiere Selenium ni JDK (usa ChromeDriver).
  • Puedes probar autenticación, flujos complejos, subida de archivos, notificaciones, etc.
  • Muy útil para detectar regresiones visuales o de comportamiento.

Características principales y métodos

Categoría Métodos más usados Descripción
Navegación visit(), visitRoute() Ir a una URL
Interacción type(), clear(), click(), press() Escribir, hacer clic
Selectores select(), check(), radio() Formularios
Esperas waitForText(), waitUntilMissing() Esperar a que aparezca algo
Assertions assertSee(), assertValue(), assertChecked(), assertPathIs() Verificaciones
Elementos screenshot(), pause() Capturas y pausas
Múltiples ventanas withUser(), openNewWindow() Usuarios y pestañas

Instalación

Ejecutar los siguientes comandos:

composer require laravel/dusk --dev

php artisan dusk:install
El comando "dusk:install" hace lo siguiente:
  • Crea la carpeta "tests/Browser"
  • Instala el ChromeDriver compatible con el sistema
  • Crea un ejemplo de test
Es necesario asegurarse de tener configurada la variable "APP_URL" en tu archivo ".env":

APP_URL=http://localhost:8000
Nota: No registrar el DuskServiceProvider en producción nunca.

Creando el primer test

php artisan dusk:make LoginTest
Ejemplo de un test básico:

namespace Tests\Browser;

use Illuminate\Foundation\Testing\DatabaseMigrations;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;

class LoginTest extends DuskTestCase
{
    use DatabaseMigrations;

    public function test_usuario_puede_iniciar_sesion()
    {
        $user = User::factory()->create([
            'email' => 'test@example.com',
            'password' => bcrypt('password'),
        ]);

        $this->browse(function (Browser $browser) use ($user) {
            $browser->visit('/login')
                    ->type('email', $user->email)
                    ->type('password', 'password')
                    ->press('Iniciar Sesión')
                    ->assertPathIs('/dashboard')
                    ->assertSee('Bienvenido');
        });
    }
}
Ejecutar el test con el comando:

php artisan dusk

Mejores prácticas

Dusk permite crear clases de página para mantener el código limpio:

php artisan dusk:page LoginPage
Ejemplo:

public function test_login()
{
    $this->browse(function (Browser $browser) {
        $browser->visit(new LoginPage)
                ->login('test@example.com', 'password')
                ->assertSee('Dashboard');
    });
}

Ventajas de Laravel Dusk

  • Sintaxis muy limpia, orientada y con excelente integración con Laravel.
  • Soporta Livewire, Inertia.js y Vue sin problemas.
  • Fácil de ejecutar en CI/CD (GitHub Actions, Forge, Vapor, etc.).
  • Permite tomar capturas de pantalla automáticamente en caso de fallo.

Desventajas

  • Pruebas más lentas que las pruebas unitarias o HTTP tests.
  • Requiere Chrome, lo que complica el entorno de CI si no está bien configurado.
  • No es ideal para miles de tests, es mejor combinar con Feature Tests + Dusk solo para los flujos críticos.