Laravel

Write Test for Laravel Task Scheduler

For interactive laravel application, we need task schedular. Writing task schedular is very easy by the magic of laravel. However writing test for schedular is not that straight-forward. In this post, I will show you how can you easily test your schedular.

What you need?

  • A laravel application

#Table of Content

#Scenario

Imagine that in my app, I have a job called SendEmailReminderJob that run in every minute.

#Create Job

To create the job, you need to run the following command:

php artisan make:job SendEmailReminderJob

You will get a job like this:


namespace App\Jobs;

// Some imports... 

class SendEmailReminderJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Execute the job.
     */
    public function handle(): void
    {
        // Write your logic here 🙂
    }
}

#Schedule the Job

To schedule the job, you need to go to App\Console\Kernel.php file and add the following line in the schedule() method.

protected function schedule(Schedule $schedule)
{
    $schedule->job(new SendEmailReminderJob )->everyMinute();
}

â„šī¸ Check more how schedular works.

If your system configure queue properly, the SendEmailReminderJob job will run in every minutes.

#Write Test

I will create a test class for writing the test.

php artisan make:test SchedularTest

In the SchedularTest class,


make(Schedule::class);

        // Only keep the events that match the $jobClass in their description field. 
        $event = collect($schedule->events())->filter(function (Event $event) use ($jobClass) {
            return $event->description === $jobClass;
        })->first();

        // Assert
        // Assertion ensures that the event passes all registered filters
        $this->assertTrue($event->filtersPass($this->app));

        // Confirm the expression which run in every second
        $this->assertEquals("* * * * *", $event->expression);
    }
}

#Run the test

Now run the test, and hope everything will pass for you.

php artisan test

Thanks for reading 🙂.