Skip to content

[12.x] Add fakeFor and fakeExceptFor methods to Queue facade #56149

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: 12.x
Choose a base branch
from

Conversation

MrPunyapal
Copy link
Contributor

@MrPunyapal MrPunyapal commented Jun 26, 2025

This PR adds temporary testing methods to the Queue facade, following the same pattern established by the Event facade in #24230.

What's Added

New Queue Facade Methods:

  • Queue::fakeExcept($jobsToAllow) - Creates a fake that allows certain jobs to be queued normally while faking others
  • Queue::fakeFor($callable, $jobsToFake = []) - Temporarily replaces the queue with a fake during the execution of a callable
  • Queue::fakeExceptFor($callable, $jobsToAllow = []) - Temporarily replaces the queue with a fake that allows certain jobs through during the execution of a callable

Benefits

Improved Test Isolation:

// Before: Fake affects the entire test
Queue::fake();
// ... test code ...
// Manual cleanup required

// After: Fake is automatically scoped
Queue::fakeFor(function () {
    Queue::push(new ProcessPayment);
    Queue::assertPushed(ProcessPayment::class);
}); // Original queue automatically restored

Selective Job Faking:

<?php
// Allow critical jobs to be queued normally, fake others
Queue::fakeExceptFor(function () {
    Queue::push(new CriticalSystemJob);  // Actually queued
    Queue::push(new EmailNotification);  // Faked
    
    Queue::assertNotPushed(CriticalSystemJob::class);
    Queue::assertPushed(EmailNotification::class);
}, [CriticalSystemJob::class]);

@MrPunyapal MrPunyapal changed the title [12.x] Feat: fake for and fake except for Queue [12.x] Add fakeFor and fakeExceptFor methods to Queue facade Jun 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant