Залежності тестів · Pest
Іноді тест не пройде, поки перед ним не станеться щось інше. Скажімо, перевірити, що користувачі можуть змінювати свої акаунти, є сенс лише тоді, коли ви вже переконалися, що акаунт узагалі можна створити.
Для таких випадків Pest має метод depends(): «дочірній» тест указує, що він залежить від одного чи кількох «батьківських» тестів.
test('parent', function () {
expect(true)->toBeTrue();
});
test('child', function () {
expect(false)->toBeFalse();
})->depends('parent');
У цьому прикладі тест child запуститься після того, як тест parent успішно завершиться.
Якщо тест parent провалиться, тест child буде пропущено, а в результатах тестів зʼявиться відповідне повідомлення.
test('parent', function () {
expect(true)->toBeFalse();
});
test('child', function () {
expect(false)->toBeFalse();
})->depends('parent');
Наведений вище приклад дає такий вивід:
Не забувайте, що функція it() за замовчуванням додає до назви тесту префікс «it». Тому, коли посилаєтеся на назву тесту через метод depends(), префікс «it » потрібно вказати.
it('is the parent', function () {
expect(true)->toBeTrue();
});
test('child', function () {
expect(false)->toBeFalse();
})->depends('it is the parent');
Результат:
Батьківські тести можуть навіть повертати значення, доступні як аргументи в тесті child.
test('parent', function () {
expect(true)->toBeTrue();
return 'from parent';
});
test('child', function ($parentValue) {
var_dump($parentValue); // from parent
expect($parentValue)->toBe('from parent');
})->depends('parent');
Тестові можна задати й кілька залежностей. Але тоді всі батьківські тести мусять пройти, а значення, які повернув кожен із них, будуть доступні як параметри функції в тому самому порядку, в якому вказані залежності.
test('a', function () {
expect(true)->toBeTrue();
return 'a';
});
test('b', function () {
expect(true)->toBeTrue();
return 'b';
});
test('c', function () {
expect(true)->toBeTrue();
return 'c';
});
test('d', function ($testA, $testC, $testB) {
var_dump($testA); // a
var_dump($testB); // b
var_dump($testC); // c
})->depends('a', 'b', 'c');
Залежності між тестами трапляються нечасто, але вони допомагають оптимізувати тести й рідше створювати ті самі ресурси заново. У наступному розділі ми розглянемо, як створювати плагіни: Створення плагінів
Перекладаємо з офіційної документації, розділ за розділом, і не ховаємо недоперекладене. Помітили неточність у терміні чи реченні: напишіть, виправимо.