Tengo una prueba que debería generar un gancho a través de renderHook y también envolverlo en un proveedor de contexto:
describe("useShowMessages", () => { const amendedMockContext = { ...baseMockContext, // baseMockContext is jut an object I've been using with a value for each item I have in context. conversationData: { data: [{ key: "test" }], }, }; const MockContext = createContext(amendedMockContext); it("should return a full visibility tree on first call", () => { const wrapper = ({ children }: any) => ( // @ts-ignore <MockContext.Provider value={amendedMockContext}> {children} </MockContext.Provider> ); const { result } = renderHook(() => useShowMessages(), { wrapper }); console.log(result.current); }); });Yo uso el contexto en mi gancho así:
export const useShowMessages = () => { const { conversationData: { data }, setNeedsInputIndexes, showChat, setCurrentStep, } = useContext(AppContext); // the rest of the hook logic }Sin embargo, cuando intento ejecutar esta prueba, siempre aparece el mismo error:
TypeError: Cannot read properties of undefined (reading 'data') 5 | export const useShowMessages = () => { 6 | const { > 7 | conversationData: { data }, | ^ 8 | setNeedsInputIndexes, 9 | showChat, 10 | setCurrentStep, Puede ver que la prueba está fallando cuando intento extraer valores de contexto usando useContext . No está reconociendo data en absoluto.
Lo configuré siguiendo los ejemplos establecidos en los documentos de la biblioteca de prueba, así como los ejemplos en este artículo . Tengo otras pruebas que usan context y baseMockContext / amendedMockContext , así como otras pruebas de renderHook . todos funcionan bien, pero este es el primero que usa ambos en conjunto y no funciona...
EDITAR:
Aquí está mi AppContext para usar en la aplicación real:
import { createContext, Dispatch, SetStateAction } from "react"; import { ConversationDataType, FetchResultsType, IntroductionDataType, } from "./types"; export type AppContextType = { // a bunch of types }; export const AppContext = createContext({} as AppContextType);