Laravel вводить метод assertFailedWith, який дозволяє більш точно тестувати збої в обробці завдань у черзі. Це дає можливість розробникам перевірити не лише факт збою, а й зрозуміти, як і чому цей збій відбувся.
Метод assertFailedWith підтримує різні типи асерцій для всебічного тестування збоїв завдань:
use App\Jobs\ProcessDocument;
use App\Exceptions\ProcessingException;
$job = (new ProcessDocument)->withFakeQueueInteractions();
// Тестування з повідомленням
$job->assertFailedWith('processing failed');
// Тестування з класом винятку
$job->assertFailedWith(ProcessingException::class);
// Тестування з екземпляром винятку
$job->assertFailedWith(new ProcessingException);
// Тестування з конкретним повідомленням
$job->assertFailedWith(new ProcessingException(message: 'invalid format'));
// Тестування з повідомленням та кодом
$job->assertFailedWith(new ProcessingException(message: 'timeout error', code: 408));
Цей метод також можна використовувати для інтеграційного тестування з зовнішніми сервісами:
class ExternalServiceJobTest extends TestCase
{
public function test_api_sync_handles_rate_limiting()
{
Http::fake(['*' => Http::response([], 429)]);
$job = new SyncExternalDataJob($apiEndpoint)
->withFakeQueueInteractions();
$job->handle();
$job->assertFailedWith(
new RateLimitException('API rate limit exceeded', 429)
);
}
public function test_webhook_delivery_handles_invalid_endpoint()
{
$job = new DeliverWebhookJob('invalid-url', $payload)
->withFakeQueueInteractions();
$job->handle();
$job->assertFailedWith(
new InvalidEndpointException('Invalid webhook URL format')
);
}
}
Метод assertFailedWith забезпечує всебічне тестування збоїв завдань, перевіряючи конкретні умови збоїв. Це робить тестові набори надійнішими та допомагає розробникам гарантувати коректну обробку помилок у їхніх робітниках черги