<? phpukraine ДОКУМЕНТАЦІЯ
⌕Пошук по платформі
Документація українською

Переклад офіційної документації українською. Кожен розділ показує стан готовності: недоперекладене позначене відкрито, а не приховане.

ПОЧАТОК · ПЕРЕКЛАДЕНО оновлено 24 вересня 2026

Налаштування · Pest

Файл Pest.php - це конфігураційний файл, у якому описано налаштування вашого набору тестів. Він лежить у теці tests вашого проєкту і автоматично завантажується Pest під час запуску тестів. Хоча в ньому можна визначати глобальні хуки або власні очікування, основне його призначення - вказати базовий клас тесту, який використовується у вашому наборі тестів.

Коли ви працюєте з Pest, змінна $this, доступна всередині замикань, переданих у тестові функції, привʼязана до конкретного класу тест-кейсу, зазвичай це PHPUnit\Framework\TestCase. Завдяки цьому тести, написані у функціональному стилі Pest, мають доступ до нижчого рівня - API тверджень PHPUnit, що спрощує співпрацю з розробниками, які краще знають фреймворк PHPUnit.

it('has home', function () {
    echo get_class($this); // \PHPUnit\Framework\TestCase

    $this->assertTrue(true);
});

Проте ви можете повʼязати окрему теку або й увесь набір тестів з іншим базовим класом тест-кейсу і в такий спосіб змінити значення $this всередині тестів. Для цього скористайтеся функцією pest() і методом in() у вашому конфігураційному файлі Pest.php.

// tests/Pest.php
pest()->extend(Tests\TestCase::class)->in('Feature');

// tests/Feature/ExampleTest.php
it('has home', function () {
    echo get_class($this); // \Tests\TestCase
});

Крім того, Pest підтримує glob-шаблони у методі in(). Це дозволяє задати кілька тек або файлів одним шаблоном. Glob-шаблони - це рядкові представлення, які можуть збігатися з різними шляхами до файлів, подібно до символів підстановки. Якщо ви не знайомі з glob-шаблонами, зверніться до посібника PHP тут.

// tests/Pest.php
pest()->extend(Tests\TestCase::class)->in('Feature/*Job*.php');

// Це застосує Tests\TestCase до всіх тестових файлів у теці "Feature", які містять "Job" в імені файлу.

Складніший приклад - використання шаблону, який збігається з кількома теками в різних модулях, із застосуванням кількох класів тест-кейсів і трейтів:

// tests/Pest.php
pest()
    ->extend(DuskTestCase::class)
    ->use(DatabaseMigrations::class)
    ->in('../Modules/*/Tests/Browser');

// Це застосує клас DuskTestCase і трейт DatabaseMigrations до всіх тестових файлів усередині теки "Browser" будь-якого модуля.

Будь-який метод, оголошений у вашому базовому класі тест-кейсу як public або protected, доступний усередині тестового замикання.

use PHPUnit\Framework\TestCase as BaseTestCase;

// tests/TestCase.php
class TestCase extends BaseTestCase
{
    public function performThis(): void
    {
        //
    }
}

// tests/Pest.php
pest()->extend(TestCase::class)->in('Feature');

// tests/Feature/ExampleTest.php
it('has home', function () {
    $this->performThis();
});

Трейт можна привʼязати до тесту або теки так само, як і класи. Наприклад, у Laravel ви можете застосувати трейт RefreshDatabase, щоб скидати базу даних перед кожним тестом. Щоб підключити трейт до тесту, передайте його імʼя в метод pest()->use().

<?php

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

pest()->extend(TestCase::class)->use(RefreshDatabase::class)->in('Feature');

Щоб повʼязати конкретний тест із певним класом тест-кейсу або трейтом, скористайтеся методами pest()->extend() і pest()->use() усередині того конкретного тестового файлу, не використовуючи метод in().

pest()->extend(Tests\MySpecificTestCase::class);

it('has home', function () {
    echo get_class($this); // \Tests\MySpecificTestCase
});

Далі: одна з можливостей, доступних під час налаштування набору тестів, - групування тек. Вона дозволяє фільтрувати запущені тести за допомогою опції --group: Групування тестів

Стан перекладу

Перекладаємо з офіційної документації, розділ за розділом, і не ховаємо недоперекладене. Помітили неточність у терміні чи реченні: напишіть, виправимо.

48%
Готовності
0
У роботі
12
Ще не перекладено
Глосарій термінів