I want to test if component renders inside render function. Component is wrapped inside Consumer:
const TestComponent = () => (
<div>
<ItemsContext.Consumer>
{(value) => (
<Autos
autoEnabled={value.autoEnabled}
/>
)}
</ItemsContext.Consumer>
</div>
);
I set context in the upper component:
const AutosWrapper = () => (
<ItemsContext.Provider value={{ autoEnabled: false, sourcesEnabled: true }}>
<TestComponent/>
</ItemsContext.Provider>
)
My test is as follows:
import ItemsContext from '../ItemsContext';
describe('<TestComponent /> Component render', () => {
let wrapper;
beforeEach(() => {
wrapper = shallow(<TestComponent {...props} />);
});
describe('<TestComponent /> rendering', () => {
test('should render child components in <TestComponent /> component', () => {
const autoContextWrapper = wrapper.find(ItemsContext.Consumer).at(0)
.renderProp('children')();
expect(autoContextWrapper.find(Autos).length).toEqual(1);
});
});
});
but when I run this test, I have following error - TypeError: Cannot read property 'autoEnabled' of undefined
I cannot understand how to pass default values to the context or mock them. I tried such a variant but without success:
ItemsContext.Consumer = jest.fn((props) => props.children({ autoEnabled: false }));