Перший тест · Pest
Цей розділ коротко показує, як писати тести на Pest. Після встановлення Pest у проєкті зʼявляться такі файли й теки:
├── 📂 tests
│ ├── 📂 Unit
│ │ └── ExampleTest.php
│ └── 📂 Feature
│ │ └── ExampleTest.php
│ └── TestCase.php
│ └── Pest.php
├── phpunit.xml
Тека tests - головна директорія, де лежать усі файли тестів. Усередині неї дві підтеки, Unit і Feature, у яких зберігаються модульні (unit) і функціональні (feature) тести відповідно. У файлі TestCase.php описують спільну функціональність або підготовку, яку треба використати в усіх тестах. Файл Pest.php слугує для налаштування тестового набору.
Крім того, у корені проєкту є файл phpunit.xml, через який задають різні опції PHPUnit під час запуску тестів. Pest побудований поверх PHPUnit, тому всі опції PHPUnit доступні й у Pest. Отже, будь-яке налаштування чи кастомізація у файлі phpunit.xml пошириться й на тести Pest.
Коли починаєте писати тести для проєкту, подумайте, як створювати й організовувати файли тестів. Зазвичай файли тестів мають суфікс Test.php, наприклад ExampleTest.php.
Ваш перший тест
Для першого тесту напишімо щось просте. Уявіть, що у вашому проєкті є глобальна функція sum, яка додає два числа. Щоб перевірити цю функцію, створіть файл Tests\Unit\SumTest.php з таким кодом.
test('sum', function () {
$result = sum(1, 2);
expect($result)->toBe(3);
});
Коли код тесту написано, час запустити тести через Pest. Після виконання команди ./vendor/bin/pest Pest покаже повідомлення про те, чи тести пройшли, чи впали.

Замість функції test() Pest пропонує зручну функцію it(), яка просто додає перед описом тесту слово «it», роблячи тести читабельнішими.
it('performs sums', function () {
$result = sum(1, 2);
expect($result)->toBe(3);
});
У цьому випадку після запуску команди ./vendor/bin/pest у виводі буде опис «it performs sums» разом із результатом тесту.

Нарешті, функція describe() дозволяє групувати повʼязані тести. Наприклад, через describe() можна згрупувати всі тести, що стосуються функції sum().
describe('sum', function () {
it('may sum integers', function () {
$result = sum(1, 2);
expect($result)->toBe(3);
});
it('may sum floats', function () {
$result = sum(1.5, 2.5);
expect($result)->toBe(4.0);
});
});
Після запуску команди ./vendor/bin/pest у виводі буде опис «sum performs sums» разом із результатом тесту.
Expectation API
Як ви могли помітити в попередніх прикладах, для перевірок у коді тестів ми користувалися expectation API від Pest. Функція expect() - основа цього API, вона стверджує, що певні умови виконані.
Наприклад, у попередньому прикладі ми написали expect($result)->toBe(3), щоб переконатися: значення $result дорівнює 3. Expectation API в Pest має безліч інших функцій перевірки для тестування поведінки коду, зокрема toBeTrue(), toBeFalse() і toContain().
З expectation API перевірки виходять стислими й читабельними, тож одразу зрозуміло, що робить ваш код і як він має поводитися. У наступному розділі ми розглянемо найуживаніші функції перевірки з expectation API.
Assertion API
Expectation API в Pest зручний, але не єдиний доступний варіант. Можна користуватися й assertion API від PHPUnit: це стане в пригоді, якщо ви вже знайомі з ним або якщо потрібні складніші перевірки, яких немає в expectation API Pest.
test('sum', function () {
$result = sum(1, 2);
$this->assertSame(3, $result); // Те саме, що expect($result)->toBe(3)
});
Повну документацію assertion API від PHPUnit можна знайти на сайті PHPUnit: docs.phpunit.de/en/11.4/assertions.html
Переходьте до наступного розділу, щоб дізнатися більше про використання Expectation API: Очікування →
Перекладаємо з офіційної документації, розділ за розділом, і не ховаємо недоперекладене. Помітили неточність у терміні чи реченні: напишіть, виправимо.