Многие считают тесты в Laravel «ненужной головной болью». Но правда в том, что без них ты будешь копать баги в проде руками и материться на чужие изменения.
Laravel делает всё максимально просто: PHPUnit встроен, есть фабрики, есть методы для работы с базой и HTTP-запросами. Тест писать реально легко, если понимать, зачем он нужен.
Шаг 1: Создаём тест
Команда artisan make:test — твой друг.
php artisan make:test UserTest
Laravel создаст файл в tests/Feature или tests/Unit в зависимости от типа теста. Unit — для логики моделей и сервисов, Feature — для тестирования потоков приложения.
Шаг 2: Пишем простой Unit-тест
Пример теста модели User:
<?php
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
use App\Models\User;
class UserTest extends TestCase
{
public function testUserCreation()
{
$user = User::factory()->create();
$this->assertDatabaseHas('users', [
'email' => $user->email,
]);
}
}
Что тут происходит:
- Создаём пользователя через фабрику (не надо городить массивы вручную).
- Проверяем, что база реально содержит запись.
Просто, понятно, работает.
Шаг 3: Запуск тестов
В командной строке запускаем:
php artisan test Laravel найдёт все тесты в tests/ и выполнит их. Результат: зелёные галочки — код работает, красные — пора копать баги.
Шаг 4: Feature-тесты
Если хочешь тестировать целые процессы — регистрация, авторизация, формы — это Feature-тесты.
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class UserRegistrationTest extends TestCase
{
use RefreshDatabase;
public function testUserCanRegister()
{
$response = $this->post('/register', [
'name' => 'Test User',
'email' => 'test@example.com',
'password' => 'password',
'password_confirmation' => 'password',
]);
$response->assertStatus(302); // редирект на /home
$this->assertAuthenticated(); // проверяем, что пользователь залогинен
}
}
Что тут важно:
- Используем
RefreshDatabase— каждая проверка стартует с чистой базы. - Проверяем статус ответа и факт аутентификации.
Feature-тесты позволяют реально имитировать поведение пользователя, а не только крутить фабрики.
Лайфхаки по тестам в Laravel
- Фабрики — твой друг. Не надо вручную писать массивы данных для моделей.
- RefreshDatabase для чистоты. Без этого каждый тест будет влиять на другой — полный хаос.
- Тесты — не для красоты. Пиши их там, где ломается логика, где важна база или поток данных.
- HTTP-тесты круче Unit. Можно проверять формы, авторизацию, редиректы, куки и сессии.
- Комбинируй Unit и Feature. Unit — мелкая логика, Feature — поток приложения.
Итог
Тесты в Laravel — это не какой-то навязанный стандарт. Это реально инструмент, который помогает не сдохнуть на проде.
Unit-тесты проверяют модели и сервисы. Feature-тесты — весь поток от формы до базы. Комбинируя их, ты получаешь уверенность, что код работает, а баги не вылезут случайно.
Но давай по-честному: тестами покрыть всё практически невозможно. Особенно в крупных проектах, где менеджер хочет «быстро и вчера» — тебе не дадут недели на тестирование каждого мелкого метода. Там приходится выбирать, что реально критично: регистрация, платежи, авторизация, ключевые бизнес-процессы. Остальное — риск, костыли и надежда на внимательных разработчиков.
Так что тесты — это страховка, а не волшебная кнопка «всё работает». Пиши их там, где реально больно сломать, а остальное делай здраво и аккуратно.
0 комментариев