Винятки · Pest
Коли ви тестуєте поведінку в PHP, іноді потрібно перевірити, що виняток або помилка справді викинуті. Щоб створити тест, який очікує викидання винятку, скористайтеся методом throws().
it('throws exception', function () {
throw new Exception('Something happened.');
})->throws(Exception::class);
Якщо ви хочете зробити ще й перевірку повідомлення винятку, передайте методу throws() другий аргумент.
it('throws exception', function () {
throw new Exception('Something happened.');
})->throws(Exception::class, 'Something happened.');
Коли тип винятку не важливий і вас цікавить лише повідомлення, передайте саме повідомлення, не вказуючи тип винятку.
it('throws exception', function () {
throw new Exception('Something happened.');
})->throws('Something happened.');
Методом throwsIf() можна перевіряти виняток умовно: перевірка виконується, якщо задане булеве вираження дає true.
it('throws exception', function () {
//
})->throwsIf(fn() => DB::getDriverName() === 'mysql', Exception::class, 'MySQL is not supported.');
Так само як throwsIf(), метод throwsUnless() перевіряє виняток умовно, якщо задане булеве вираження дає false.
it('throws exception', function () {
//
})->throwsUnless(fn() => DB::getDriverName() === 'mysql', Exception::class, 'Only MySQL is supported.');
Ви також можете перевірити, що задане замикання викидає один або кілька винятків, за допомогою методу toThrow() з API очікувань.
it('throws exception', function () {
expect(fn() => throw new Exception('Something happened.'))->toThrow(Exception::class);
});
Якщо ви очікуєте, що жодного винятку не буде викинуто, використовуйте метод throwsNoExceptions().
it('throws no exceptions', function () {
$result = 1 + 1;
})->throwsNoExceptions();
Часом потрібно просто позначити тест як провалений. Для цього є метод fail().
it('fails', function () {
$this->fail();
});
Методу fail() можна передати й повідомлення.
it('fails', function () {
$this->fail('Something went wrong.');
});
Крім того, методом fails() можна перевірити, що тест провалюється.
it('fails', function () {
$this->fail('Something happened.');
})->fails();
Причину провалу теж можна перевірити, передавши повідомлення методу fails().
it('fails as expected', function () {
$this->fail('Something happened.');
})->fails('Something happened.'); // Проходить
it('fails in an unexpected way', function () {
$this->fail('Something unexpected happened.');
})->fails('Something happened.'); // Провалюється
Тепер, коли ви навчилися писати тести з перевіркою винятків, наступний крок - розібратися з «Фільтруванням тестів». Ця можливість дозволяє ефективно запускати конкретні тести за критеріями на зразок назви тесту, змінених файлів та інших: Фільтрування тестів →
Перекладаємо з офіційної документації, розділ за розділом, і не ховаємо недоперекладене. Помітили неточність у терміні чи реченні: напишіть, виправимо.