Честно, тесты через браузер — это то, на чём многие кладут болт. Потому что, ну блин, зачем писать код, чтобы проверить, что форма логина работает? Проще же самому тыкнуть, ввести пароль "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 — это не "инновация для ускорения разработки", а банальная отмазка от ручного дебилизма. Он нужен не потому, что так сказали на конференции, а потому что тебе надоело в сотый раз проверять логин руками.
Когда тесты падают — это тоже польза: значит, ты опять что-то сломал, и браузер честно сказал: "нет, дружище, твоя кнопка — мёртвая". А значит, лучше поймать это в тесте, чем потом клиент напишет "я не могу войти", и ты будешь отнекиваться скриншотами.
0 комментариев