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

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

ОСНОВИ · ПЕРЕКЛАДЕНО оновлено 25 вересня 2026

Датасети · Pest

Набори даних (datasets) дають змогу описати масив тестових даних, і Pest автоматично запустить той самий тест для кожного набору. Це економить час і зусилля, бо не доводиться вручну повторювати той самий тест з різними даними.

it('has emails', function (string $email) {
    expect($email)->not->toBeEmpty();
})->with(['enunomaduro@gmail.com', 'other@example.com']);

Під час запуску тестів Pest автоматично додає до тестів із наборами даних інформативні описи, де перелічені використані параметри. Це допомагає зрозуміти дані й знайти причину, якщо тест впаде.

Ви також можете передати кілька аргументів, надавши масив, що містить масиви аргументів.

it('has emails', function (string $name, string $email) {
    expect($email)->not->toBeEmpty();
})->with([
    ['Nuno', 'enunomaduro@gmail.com'],
    ['Other', 'other@example.com']
]);

Щоб вручну додати власний опис до значення набору даних, достатньо призначити йому ключ.

it('has emails', function (string $email) {
    expect($email)->not->toBeEmpty();
})->with([
    'james' => 'james@laravel.com',
    'taylor' => 'taylor@laravel.com',
]);

Якщо ключ додано, Pest використає його, коли формуватиме опис тесту.

Якщо назва тесту містить :dataset, опис буде підставлено в назву тесту саме в цьому місці.

  ✓ it validates the "first_name" field
  ✓ it validates the "email" field

Зверніть увагу: коли ви використовуєте closures у наборі даних, потрібно оголосити типи аргументів у замиканні, переданому тестовій функції.

it('can sum', function (int $a, int $b, int $result) {
    expect(sum($a, $b))->toBe($result);
})->with([
    'positive numbers' => [1, 2, 3],
    'negative numbers' => [-1, -2, -3],
    'using closure' => [fn () => 1, 2, 3],
]);

Для більших або складніших сценаріїв можна використати замикання.

// Повертаємо масив
test('The array contains only integers', function ($i) {
    expect($i)->toBeInt();
})->with(fn (): array => range(1, 99));

// Використовуємо генератор
test('The generator produces only integers', function ($i) {
    expect($i)->toBeInt();
})->with(function (): Generator {
    for ($i = 1 ; $i < 100_000_000_000 ; $i++) {
        yield $i;
    }
});

Привʼязані набори даних

Привʼязані набори даних (bound datasets) у Pest дають набір, який резолвиться після методу beforeEach() ваших тестів. Це особливо зручно в Laravel-застосунках (як і в будь-якій іншій інтеграції з Pest), коли вам потрібен набір моделей App\Models\User, створених уже після того, як beforeEach() підготував схему бази даних.

it('can generate the full name of a user', function (User $user) {
    expect($user->full_name)->toBe("{$user->first_name} {$user->last_name}");
})->with([
    fn() => User::factory()->create(['first_name' => 'Nuno', 'last_name' => 'Maduro']),
    fn() => User::factory()->create(['first_name' => 'Luke', 'last_name' => 'Downing']),
    fn() => User::factory()->create(['first_name' => 'Freek', 'last_name' => 'Van Der Herten']),
]);

За потреби до тест-кейсу можна привʼязати й один окремий аргумент. Проте Pest вимагає, щоб він був повністю типізований в аргументах функції it|test.

-it('can generate the full name of a user', function ($user, $fullName) {
+it('can generate the full name of a user', function (User $user, $fullName) {
    expect($user->full_name)->toBe($fullName);
})->with([
    [fn() => User::factory()->create(['first_name' => 'Nuno', 'last_name' => 'Maduro']), 'Nuno Maduro'],
    [fn() => User::factory()->create(['first_name' => 'Luke', 'last_name' => 'Downing']), 'Luke Downing'],
    [fn() => User::factory()->create(['first_name' => 'Freek', 'last_name' => 'Van Der Herten']), 'Freek Van Der Herten'],
]);

Спільні набори даних

Якщо зберігати набори даних окремо, у теці tests/Datasets, їх легко відрізнити від коду тестів, і вони не захаращують основні тестові файли.

// tests/Unit/ExampleTest.php...
it('has emails', function (string $email) {
    expect($email)->not->toBeEmpty();
-})->with(['enunomaduro@gmail.com', 'other@example.com']);
+})->with('emails');

// tests/Datasets/Emails.php...
+dataset('emails', [
+    'enunomaduro@gmail.com',
+    'other@example.com'
+]);

Привʼязані набори, ключі з описами та інші правила, які діють для вбудованих наборів даних, так само застосовні й до спільних.

Обмежені за областю набори даних

Буває, що набір даних стосується лише певної функціональності або групи тек. У такому разі замість того, щоб розкладати його глобально в теці Datasets, можна створити файл Datasets.php усередині потрібної теки й обмежити область дії набору даних лише цією текою.

// tests/Feature/Products/ExampleTest.php...
it('has products', function (string $product) {
    expect($product)->not->toBeEmpty();
})->with('products');

// tests/Feature/Products/Datasets.php...
dataset('products', [
    'egg',
    'milk'
]);

Комбінування наборів даних

Складні набори даних легко отримати, поєднавши вбудовані (inline) та спільні (shared) набори. При цьому набори комбінуються за принципом декартового добутку.

У прикладі нижче ми перевіряємо, що всі вказані заклади зачинені в кожен із наведених днів тижня.

dataset('days_of_the_week', [
    'Saturday',
    'Sunday',
]);

test('business is closed on day', function(string $business, string $day) {
    expect(new $business)->isClosed($day)->toBeTrue();
})->with([
    Office::class,
    Bank::class,
    School::class
])->with('days_of_the_week');

Після запуску цього прикладу у виводі Pest буде опис кожної перевіреної комбінації.

Повторення тестів

Інколи тест треба прогнати кілька разів: для налагодження або щоб переконатися в його стабільності. Для таких випадків є метод repeat(), який повторює тест задану кількість разів.

it('can repeat a test', function () {
    $result = /** Якийсь код, що може бути нестабільним */;

    expect($result)->toBeTrue();
})->repeat(100); // Повторити тест 100 разів

Опанувавши набори даних у тестуванні, наступний важливий крок - розібратися, як тестувати винятки. Ідеться про перевірку того, що ваш код поводиться правильно й кидає відповідні винятки, коли отримує несподівані або помилкові вхідні дані: Винятки →

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

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

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