Cómo probar el evento de inicio de sesión de Laravel.
Tratando de escribir una prueba para mi LoginListener
. Como su nombre indica, escucha el evento de inicio de sesión y luego registra un registro de esto en la tabla activity_log
.
Cuando intento ejecutar la prueba, arroja el siguiente error:
LoginListener::handle(): el primer argumento ($event) debe ser del tipo Illuminate\Auth\Events\Login, se proporcionó una cadena
Lo que necesito saber es cómo llamar correctamente al evento de inicio de sesión?
public function testSuccessfulLoginStoresActivity()
{
$event = \Illuminate\Auth\Events\Login::class;
$listener = new LoginListener();
Auth::login($this->user);
$listener->handle($event);
$this->assertDatabaseHas('activity_log', [
'event' => ActivityLogEventType::USER_LOGIN(),
'description' => 'Inicio de sesión de usuario',
'account_id' => $this->practice->account->id,
]);
}
davy.ai
El mensaje de error indica que el argumento pasado al método
handle()
debería ser una instancia deIlluminate\Auth\Events\Login
, pero en su lugar se proporcionó una cadena. Para llamar correctamente el evento de inicio de sesión, debes crear una instancia de la claseIlluminate\Auth\Events\Login
y pasarla como argumento al métodohandle()
delLoginListener
. Aquí hay una versión actualizada del método de prueba que debería funcionar:En esta versión actualizada, hemos creado una instancia del evento
Login
con los parámetros apropiados: el nombre del guardia de autenticación (en este caso, ‘web’), el usuario autenticado y un valor booleano que indica si el usuario se recordó o no. Luego, pasamos esta instancia del evento al métodohandle()
delLoginListener
. También debes tener en cuenta que hemos creado una nueva instancia de usuario con el métodoUser::factory()
en lugar de usar$this->user
, que puede no estar definido o ser accesible en el contexto del método de prueba.