Tengo que escribir una prueba unitaria de un gancho personalizado usado en index.js ( ver esta implementación ) en el que estoy pasando una función como parámetro. No sé cómo pasar una función a un gancho en la prueba unitaria. Soy un principiante.
¿Cómo puedo lograr una cobertura del 100% para mi prueba unitaria?
useBrowserFwdBackButton.ts (archivo en el que está disponible el enlace personalizado)
import React from 'react'; const useBrowserFwdBackButton = (fn: any) => { const cb = React.useRef(fn); // init with fn, so that type checkers won't assume that current might be undefined React.useEffect(() => { cb.current = fn; }, [fn]); React.useEffect(() => { const onForwardBackButtonEvent = (...args: any[]) => cb.current?.(...args); window.addEventListener('popstate', onForwardBackButtonEvent); return () => window.removeEventListener('popstate', onForwardBackButtonEvent); }, []); }; export default useBrowserFwdBackButton;index.js (desde donde está llamando el gancho desde el componente funcional)
useBrowserFwdBackButton((e) => { e.preventDefault(); if (attachmentListLength !== 0) { dispatch(deleteGoogleDocument(attachmentList)); } });Suponiendo que está utilizando jest y @testing-library/react-hooks para la prueba de ganchos
puede crear una función simulada con jest.fn() por ejemplo.
const mockFunction = jest.fn(); const { result } = renderHook(() => useBrowserFwdBackButton(mockFunction)); const { .... } = result.current; // since it's attached to windows event, you need to trigger the "popstate" event // expects here expect(mockFunction).toBeCalledTimes(1);información adicional (evento de ventana de activación) Cómo activar un evento de ventana durante la prueba unitaria usando vue-test-utils