Prueba que un comando de Laravel está programado
Si tienes una aplicación de Laravel que programa comandos para que se ejecuten en momentos específicos utilizando el archivo app/Console/Kernel.php
, es posible que desees agregar una prueba que garantice que el comando fue programado correctamente.
Primero, crea un nuevo archivo de prueba en el directorio de pruebas de tu aplicación de Laravel. En este ejemplo, llamaremos al archivo KernelTest.php y su objetivo será probar que el comando inspire
se programa para ejecutarse cada hora.
Nota: Para el ejemplo, estoy utilizando la sintaxis de Pest, pero deberías poder adaptar el código en caso de que utilices phpunit u otro:
use Illuminate\Console\Scheduling\Event;
use Illuminate\Console\Scheduling\Schedule;
it('schedules the `inspire` command' , function () {
$schedule = app()->make(Schedule::class);
$events = collect($schedule->events())->filter(function (Event $event) {
return stripos($event->command, 'inspire');
});
if ($events->count() == 0) {
$this->fail('No se encontraron eventos');
}
$events->each(function (Event $event) {
$this->assertEquals('0 * * * *', $event->expression);
});
});
En esta prueba, primero obtenemos una instancia de la clase Schedule utilizando la función app()
. Luego, utilizamos el método events()
para obtener un array de todos los eventos programados.
Luego, utilizamos el método filter()
para encontrar cualquier evento cuya propiedad command
contenga la palabra 'inspire'. Si no se encuentran eventos, fallamos la prueba.
Si se encuentra uno o más eventos, utilizamos el método each()
para recorrer cada evento y comprobar que la propiedad expression
esté configurada como '0 * * * *'
, lo cual indica que el comando está programado para ejecutarse cada hora.
Para ejecutar la prueba, utiliza el siguiente comando:
php artisan test --filter KernelTest
Esta prueba debería pasar si el comando inspire se programa para ejecutarse cada hora en la clase Kernel.
¡Eso es todo! Ahora tienes una prueba para asegurarte de que tus comandos programados se estén ejecutando correctamente en tu aplicación de Laravel.