Різниця в тому, скільки застосунку бере участь у тесті.
Feature-тест (tests/Feature) піднімає весь Laravel: маршрути, middleware, базу, контейнер. Він перевіряє поведінку так, як її бачить користувач:
it('creates an order', function () {
$user = User::factory()->create();
$this->actingAs($user)
->post('/orders', ['product_id' => 1])
->assertRedirect('/orders');
expect($user->orders)->toHaveCount(1);
});
Unit-тест (tests/Unit) перевіряє один клас ізольовано й не завантажує застосунок - отже, там немає фасадів, конфігурації й бази. Він підходить для чистої логіки:
it('calculates the discount', function () {
expect((new PriceCalculator)->withDiscount(1000, 10))->toBe(900);
});
Як обирати: у Laravel-застосунку більшість цінних тестів - feature: вони ловлять помилки на стиках, де їх найбільше, і не ламаються від рефакторингу внутрішніх класів. Unit-тести - для алгоритмів, розрахунків і класів без залежностей від фреймворку, де вони швидкі й точно вказують на поломку.
Тест створюють командою php artisan make:test, з --unit для unit-тесту.