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 puedo simular una Clase en Laravel 8.0?

Estoy intentando probar un formulario que tiene gRecaptcha:

Agregué un mock siguiendo la documentación de Laravel Docs:

$this->mock(GoogleRecaptcha::class, function (MockInterface $mock) {
     $mock->shouldReceive('isValid')->once()->andReturn(true);
});

Después de eso, se ejecuta la solicitud de envío, pero parece que en realidad está ejecutando la clase simulada desde el controlador, lo cual está generando un error. Pensé que el mock no debería ejecutarlo. Tal vez esté haciendo algo mal con el mock.

En el controlador, después de la validación, se ejecuta este código:

if (!(new GoogleRecaptcha)->isValid()) {
    abort(403, 'Parece que eres un robot');
}

GoogleRecaptcha es solo una clase en la carpeta de Soporte de la App, con solo un método: “isValid”.

De todas formas, gracias. Hernán.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Parece que la simulación no está configurada correctamente. El controlador todavía está llamando a la clase GoogleRecaptcha original en lugar de la simulada.

    Intenta cambiar el código del controlador a:

    if ($this->app->environment('testing')) {
        if (!(resolve(GoogleRecaptcha::class))->isValid()) {
            abort(403, 'Parece que eres un robot');
        }
    } else {
        if (!(new GoogleRecaptcha)->isValid()) {
            abort(403, 'Parece que eres un robot');
        }
    }
    

    Esto resolverá la clase GoogleRecaptcha desde el contenedor, lo que permitirá que se use la simulación.

    ¡Espero que esto ayude!

Comments are closed.