Laravel спрощує тестування обробки виключень за допомогою методу assertReported
фасаду Exceptions. Це надійний спосіб перевірити, що виключення коректно фіксуються та звітуються у ваших додатках.
Правильна обробка та звітування про виключення є основою надійних додатків. Проте перевірка цієї поведінки у тестах може бути складною без відповідних інструментів. Фасад Exceptions у Laravel пропонує рішення для цієї проблеми за допомогою методу assertReported
, що дозволяє підтвердити, що конкретні виключення були зафіксовані під час виконання тестів.
Ось базова реалізація:
use Illuminate\Support\Facades\Exceptions;
test('перевірка коректності звітування про виключення', function () {
Exceptions::fake();
$this->post('/generate-document', [
'force_error' => 'true',
])->assertStatus(503); // Служба недоступна
Exceptions::assertReported(ServiceUnavailableException::class);
});
Метод assertReported дуже корисний при тестуванні складних кінцевих точок, де можуть виникати різні виключення залежно від умов:
use Illuminate\Support\Facades\Exceptions;
use App\Exceptions\ValidationException;
use App\Exceptions\ResourceNotFoundException;
test('операція створення підписки обробляє кілька типів виключень', function () {
Exceptions::fake();
// Тест на виключення валідації
$this->postJson('/api/subscriptions', [
'email' => 'invalid-email',
])->assertStatus(422);
Exceptions::assertReported(ValidationException::class);
// Тест на непідвладний ресурс
$this->postJson('/api/subscriptions', [
'plan_id' => 999,
])->assertStatus(404);
Exceptions::assertReported(ResourceNotFoundException::class);
// Перевірка деталей конкретного виключення
Exceptions::assertReported(function (ResourceNotFoundException $exception) {
return $exception->getMessage() === 'План підписки не знайдений' &&
$exception->getCode() === 404;
});
});
Цей метод пропонує два підходи до перевірки. Ви можете використовувати тести на основі класу, щоб підтвердити, що тип виключення було зафіксовано:
Exceptions::assertReported(ServiceUnavailableException::class);
Або використовувати зворотний виклик для перевірки конкретних властивостей виключення:
Exceptions::assertReported(function (ServiceUnavailableException $exception) {
return $exception->getMessage() === 'Тайм-аут зовнішнього API';
});
Метод assertReported стає незамінним при тестуванні критично важливих робочих процесів, таких як платіжні системи, інтеграції з третіми сторонами або фонові завдання, де правильне звітування про виключення безпосередньо впливає на вашу здатність моніторити та налагоджувати проблеми у продуктивній системі