Точно тестуйте невдачі завдань за допомогою методу assertFailedWith у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 04 червня, 2025
В новому оновленні Laravel з’явився метод assertFailedWith, який дозволяє детально перевіряти причини та обставини невдач у чергах. Дізнайтеся, як цей метод може підвищити надійність ваших тестів та покращити обробку помилок у ваших проєктах

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 забезпечує всебічне тестування збоїв завдань, перевіряючи конкретні умови збоїв. Це робить тестові набори надійнішими та допомагає розробникам гарантувати коректну обробку помилок у їхніх робітниках черги