Честно, тесты через браузер — это то, на чём многие кладут болт. Потому что, ну блин, зачем писать код, чтобы проверить, что форма логина работает? Проще же самому тыкнуть, ввести пароль "qwerty123" и убедиться, что тебя пустило. Но это работает ровно до того момента, пока ты не в четвёртый раз подряд ночью фиксишь логин и не проверяешь его вручную. Тут и приходит спаситель — Laravel Dusk.

Нет, он не сделает за тебя всю работу, но даст нормальный инструмент: ты можешь автоматизировать вот это бесконечное "зашёл-логин-тест-кнопка". Он использует ChromeDriver, то есть гоняет реальный браузер, а не какие-то фантомные эмуляции. Смотришь на тест — и реально видно, как браузер открывается, печатает за тебя логин и пароль, жмёт кнопку и орёт: "готово". Красота.

Установка без соплей

Всё просто:

composer create-project --prefer-dist laravel/laravel dusk-example
cd dusk-example
composer require --dev laravel/dusk
php artisan dusk:install

После этого у тебя появляется папка tests/Browser и базовый класс DuskTestCase.php. Всё, можно писать тесты.

Первый тест — логин

Ну вот, например, классика жанра: проверим, что пользователь может войти.

php artisan dusk:make LoginTest

Это создаст tests/Browser/LoginTest.php. Пишем туда мясо:

<?php

namespace Tests\Browser;

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

class LoginTest extends DuskTestCase
{
    public function testUserCanLogin()
    {
        $this->browse(function (Browser $browser) {
            $browser->visit('/login')
                ->type('email', 'user@example.com')
                ->type('password', 'password')
                ->press('Login')
                ->assertPathIs('/home');
        });
    }
}

Что тут происходит? Браузер идёт на /login, печатает юзеру email, пароль, жмёт на кнопку и проверяет, что мы оказались на /home. Это и есть весь кайф Dusk: имитировать действия живого идиота, который жмёт не туда. Только теперь это автомат.

Как гонять

Запуск тестов:

php artisan dusk

Если всё норм, то браузер откроется, мигнёт пару раз, закроется, и ты увидишь зелёные галочки. Если нет — поймаешь ошибку и будешь думать, почему твоя форма логина в 2025 году работает через жопу.

Где это реально спасает

  • Формы: регистрации, логины, смена пароля — всё, что ты обычно проверяешь руками.
  • JavaScript-костыли: всякие кнопки, которые появляются только после клика или ajax-запроса. Dusk их прожимает без истерик.
  • Выпадающие списки: выбираешь элемент так же, как человек, а не через value=id1337.
  • Проверка содержимого страницы: нужен текст "Добро пожаловать, Вася"? Пожалуйста, вот тебе assert.

И вот правда

Laravel Dusk — это не "инновация для ускорения разработки", а банальная отмазка от ручного дебилизма. Он нужен не потому, что так сказали на конференции, а потому что тебе надоело в сотый раз проверять логин руками.

Когда тесты падают — это тоже польза: значит, ты опять что-то сломал, и браузер честно сказал: "нет, дружище, твоя кнопка — мёртвая". А значит, лучше поймать это в тесте, чем потом клиент напишет "я не могу войти", и ты будешь отнекиваться скриншотами.