-
Notifications
You must be signed in to change notification settings - Fork 11.8k
Closed
Description
Laravel Version
v12.45.0
PHP Version
8.3
Database Driver & Version
No response
Description
Starting from v12.45.0, the behavior of defer() has changed.
I assume this happened after "feat: fire JobAttempted for sync jobs too #58228".
Job executes and calls defer(), after the Job completes, the JobAttempted event triggers a listener:
The invokeWhen() condition evaluates to false (since it's a sync queue, in this case because it's a test), which leads to the previously set defer-callback being removed from the execution queue.
Before v12.45.0, there was no JobAttempted event, the listener didn't run, and the defer-callback was successfully executed from InvokeDeferredCallbacks middleware.
Steps To Reproduce
<?php
declare(strict_types=1);
namespace Feature;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\Events\JobAttempted;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Route;
use Tests\TestCase;
use function Illuminate\Support\defer;
class TestJob implements ShouldQueue
{
use Dispatchable;
public function handle(): void
{
dump('handle');
defer(fn() => dump('defer'))->always();
}
}
class DeferTest extends TestCase
{
public function test()
{
Event::listen(JobAttempted::class, function (JobAttempted $event) {
dump('listener');
});
Route::get('/test', function () {
TestJob::dispatch();
});
$this->get('/test');
}
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels