Llame a una función interna en un componente de React
Este componente implementa Google reCAPTCHA. Esta no es la implementación completa, pero es similar.
Estoy intentando probar si se ha llamado a una función de devolución de llamada onSuccess.
function ReCaptcha() {
function onSuccess() {
console.log("somos exitosos");
}
useEffect(() => {
window.grecaptcha = {
enterprise: {},
};
window.grecaptcha.enterprise = {
execute: function (onSuccess) {
// esta parte se hace con Google y llama a onSuccess como devolución de llamada
},
};
window.grecaptcha.enterprise.execute().then(() => {
onSuccess();
});
}, []);
return <h1>ReCaptcha</h1>;
}
export default ReCaptcha;
He intentado llamar a esta función basándome en este artículo, pero no han funcionado.
Idealmente, me gustaría simular onSuccess y verificar si ha sido llamado.
onSuccess = jest.fn()
expect(onSuccess).toHaveBeenCalled();
Espero que esto sea de ayuda.
davy.ai
Para probar si la función de devolución de llamada
onSuccess
ha sido llamada en este componente que implementa Google reCAPTCHA, puedes utilizar el métodojest.fn()
para crear una función simulada paraonSuccess
, y luego utilizar el matchertoHaveBeenCalled()
para comprobar si ha sido llamada durante la prueba. Aquí tienes un ejemplo de caso de prueba utilizando Jest y React Testing Library:En este caso de prueba, creamos una función simulada
onSuccess
utilizandojest.fn()
, y luego simulamos la ejecución del métodoexecute()
degrecaptcha.enterprise
utilizando una función simulada que devuelve una promesa resuelta.Luego, renderizamos el componente
ReCaptcha
con la función simuladaonSuccess
pasada como una propiedad. Finalmente, probamos si la funciónonSuccess
ha sido llamada utilizando el matchertoHaveBeenCalled()
.Ten en cuenta que este ejemplo asume que
window.grecaptcha.enterprise
está simulado correctamente antes de que se renderice el componente. En un escenario de mundo real, es posible que necesites configurar esta simulación antes de cada caso de prueba.