reactjs - Mocka sammansatta komponenter med Jest
Jag har en sammansatt komponent som ser ut så här:
export const Layout = Object.assign(Main, {
Top, Content, Center, Left, Right,
})
Det finns ett objekt som tilldelar Main till några andra komponenter så att man kan använda punktnotation. Nedan kan du se hur jag försöker mocka det inuti jest.setup.js-filen:
jest.mock(
'~/layouts/Layout', () => ({
__esModule: true,
default: (props) => {
return <mock-layout>{props.children}</mock-layout>
},
}),
)
Att köra jest --ci kommer att returnera ett fel med meddelandet Kan inte läsa egenskaper av undefined (läser 'Top')
I detta ämne hittade jag ett sätt att göra något liknande detta:
const component = (props) => <layout-mock>{props.children}</layout-mock>;
component.Top = (props) => <layout-mock-top>{props.children}</layout-mock-top>;
jest.mock(
'~/layouts/Layout', () => ({
__esModule: true,
default: component,
}),
)
Men det ger mig samma fel. Hur skulle jag kunna mocka det på rätt sätt? Har du några idéer?
Svar #1
Du kommer att behöva uppdatera variabelnamnet till mockVariable för att detta ska fungera för att arbeta runt felet med variabler utanför räckvidd. Detaljer här: https://jestjs.io/docs/es6-class-mocks#calling-jestmock-with-the-module-factory-parameter