Сколько раз было так: "да ладно, фича мелкая, тесты потом напишем"? А потом "потом" превращается в ночь дебага, где ты материшься на собственный код, который сломался после одной строчки.

Laravel пытается спасти тебя от этой боли, подсовывая PHPUnit и Dusk. Но тут важно понимать: они не волшебная палочка. Это молоток и гвозди. Если руки из жопы — и тесты будут такие же.

PHPUnit: простая классика

Laravel уже дружит с PHPUnit, так что ничего лишнего ставить не надо.

Создаёшь тест:

php artisan make:test ExampleTest

Laravel кинет его в tests/Feature или tests/Unit.

Простейший пример:

class ExampleTest extends TestCase
{
    public function testBasicTest()
    {
        $response = $this->get('/');
        $response->assertStatus(200);
    }
}

Это самый унылый тест на свете. Но он хотя бы проверяет, что твой роут не отвалился в 500-ю ошибку после очередного "мелкого фикса".

Запускать можно так:

php artisan test 

или через старый phpunit. Разницы особой нет, кроме красивого вывода.

Dusk: браузерный ад

Хочешь тестить не только бэкенд, но и кнопочки, которые ты клепал три дня? Вот тут тебе Dusk.

Ставим:

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

Дальше генерим тест:

php artisan dusk:make LoginTest

И вот уже сценарий входа:

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');
        });
    }
}

На бумаге всё красиво. В реале — будь готов, что твой CI будет орать, драйверы браузера будут ломаться, а тесты внезапно зависать. Dusk работает, но это не игрушка для ленивых.

Запуск:

php artisan dusk

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

  • Ты вносишь "мелкий фикс" в авторизацию и вдруг отваливается полсайта. Если есть тесты — ты сразу видишь, что всё полетело.
  • Любишь "рефакторить" в продакшене? С тестами хотя бы знаешь, где наломал дров.
  • Бизнес требует фичи вчера. Ты пихаешь её через силу, и тесты хотя бы подтверждают, что старый функционал не сдох.

Заключение

Тесты — это не про "чистый код", не про "правильную архитектуру". В Laravel инструменты есть: PHPUnit для логики, Dusk для интерфейсов. Но сами по себе они не напишутся и не спасут.