¿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.
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:
Esto resolverá la clase
GoogleRecaptcha
desde el contenedor, lo que permitirá que se use la simulación.¡Espero que esto ayude!