Laravel wprowadza metodę assertFailedWith do bardziej precyzyjnego testowania niepowodzeń zadań w kolejce, umożliwiając programistom dokładne sprawdzenie, jak i dlaczego zadania kończą się niepowodzeniem, a nie tylko potwierdzają, że wystąpiła awaria.
Metoda assertFailedWith obsługuje wiele typów asercji w celu kompleksowego testowania niepowodzeń zadań:
use App\Jobs\ProcessDocument;
use App\Exceptions\ProcessingException;
$job = (new ProcessDocument)->withFakeQueueInteractions();
// Test with message
$job->assertFailedWith('processing failed');
// Test with exception class
$job->assertFailedWith(ProcessingException::class);
// Test with exception instance
$job->assertFailedWith(new ProcessingException);
// Test with specific message
$job->assertFailedWith(new ProcessingException(message: 'invalid format'));
// Test with message and code
$job->assertFailedWith(new ProcessingException(message: 'timeout error', code: 408));
Może być również używana do testowania integracji z usługami zewnętrznymi:
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')
);
}
}
Metoda assertFailedWith umożliwia kompleksowe testowanie niepowodzeń zadań poprzez weryfikację określonych warunków awarii, dzięki czemu zestawy testów są bardziej niezawodne i pomagają programistom zapewnić prawidłową obsługę błędów w ich procesach roboczych.