Сколько раз было так: "да ладно, фича мелкая, тесты потом напишем"? А потом "потом" превращается в ночь дебага, где ты материшься на собственный код, который сломался после одной строчки.
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 для интерфейсов. Но сами по себе они не напишутся и не спасут.
0 комментариев