TGViewer
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter @phpproglib · 10.5K subscribers
Post #6436 2.16K
🔥 Настройка Pest PHP

Если ты всё ещё пишешь тесты на чистом PHPUnit с setUp() и простынями $this->assert... — этот пост для тебя. Настраиваем Pest с нуля в реальном Laravel-проекте.

📦 Шаг 1 — Установка

composer require pestphp/pest --dev
composer require pestphp/pest-plugin-laravel --dev
php artisan pest:install


После этого в корне появится tests/Pest.php — файл для глобальных хелперов и настроек. Не игнорируй его.

✍️ Шаг 2 — Первый тест

Забудь про классы. Pest — это функции:

it('создаёт пользователя через API', function () {
$response = $this->postJson('/api/users', [
'name' => 'Ivan',
'email' => 'ivan@example.com',
]);

$response->assertCreated();
expect($response->json('data.name'))->toBe('Ivan');
});


🧩 Шаг 3 — Datasets (параметризованные тесты)

Вместо копипасты одного теста на каждый кейс:

it('валидирует email', function (string $email) {
$response = $this->postJson('/api/users', [
'email' => $email
]);
$response->assertUnprocessable();
})->with([
'пустой' => [''],
'без собаки' => ['notanemail'],
'только домен' => ['@example.com'],
]);


⚙️ Шаг 4 — Глобальные настройки в Pest.php

Открываем tests/Pest.php и настраиваем раз и навсегда:

uses(
Tests\TestCase::class,
Illuminate\Foundation\Testing\RefreshDatabase::class,
)->in('Feature');

expect()->extend('toBeSuccess', function () {
return $this->toMatchArray([
'status' => 'success'
]);
});


Теперь RefreshDatabase не нужно писать в каждом файле, а кастомные матчеры делают тесты выразительнее.

🚀 Шаг 5 — Запуск

./vendor/bin/pest
./vendor/bin/pest --filter="создаёт пользователя"
./vendor/bin/pest --coverage # требует Xdebug или PCOV


💡 Почему Pest, а не чистый PHPUnit?

Меньше бойлерплейта, человекочитаемый вывод, встроенные архитектурные тесты (arch()) и отличная интеграция с Laravel. Команда Laravel официально рекомендует его с 11-й версии фреймворка.

Ставьте 🔥 если используете Pest.
  • 🥱 11
  • 🔥 6
  • ❤ 1
  • 👍 1
  • 😁 1
More from @phpproglib
  1. Sep 21, 2026⚡️ PHP 8.6 выйдет 19 ноября 2026 года. Сейчас версия находится в beta. Самые заметные изме…
  2. Sep 20, 2026❓ Какие существуют проблемы в многопоточной среде? Основные проблемы многопоточности: 1️⃣…
  3. Sep 19, 2026🌞 В Symfony 8.2 появилось 29 новых Bundle — теперь компоненты вроде Mailer, Messenger и C…
  4. Sep 19, 2026А вы уже забрали свой подарок ко Дню программиста? К вашему профессиональному празднику Tp…
  5. Sep 18, 2026🐸 Библиотека пхпшника
  6. Sep 17, 2026🛠 `str_contains` и семья: проверяем строки без ловушек Проверка через strpos годами путал…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →