es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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,
]);

}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el argumento pasado al método handle() debería ser una instancia de Illuminate\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 clase Illuminate\Auth\Events\Login y pasarla como argumento al método handle() del LoginListener. Aquí hay una versión actualizada del método de prueba que debería funcionar:

    public function testSuccessfulLoginStoresActivity()
    {
        $user = User::factory()->create();
        $event = new \Illuminate\Auth\Events\Login('web', $user, false);
    
        $listener = new LoginListener();
    
        $listener->handle($event);
    
        $this->assertDatabaseHas('activity_log', [
            'event' => ActivityLogEventType::USER_LOGIN(),
            'description' => 'Inicio de sesión del usuario',
            'account_id' => $user->account->id,
        ]);
    }
    

    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étodo handle() del LoginListener. También debes tener en cuenta que hemos creado una nueva instancia de usuario con el método User::factory() en lugar de usar $this->user, que puede no estar definido o ser accesible en el contexto del método de prueba.

Comments are closed.