code:
class Foo extends React.PureCompo
Solution:
1: use the async/await syntax.
2: Use mount (no shallow).
3: await async componentLifecycle.
For ex:
test(' ',async () => {
const wrapper = mount(
<Foo />
);
await wrapper.instance().componentDidMount();
})
Try this:
it('should do something', async function() {
const wrapper = shallow(<Foo />);
await wrapper.instance().componentDidMount();
app.update();
expect(wrapper.instance().bar).toBe(100);
});
Something like this should work for you:-
describe('...', () => {
test('...', async () => {
const wrapper = await mount(<Foo/>);
expect(wrapper.instance().bar).toBe(100);
});
});
None of the solutions provided here fixed all my issues. At the end I found https://medium.com/@lucksp_22012/jest-enzyme-react-testing-with-async-componentdidmount-7c4c99e77d2d which fixed my problems.
Summary
function flushPromises() {
return new Promise(resolve => setImmediate(resolve));
}
it('should do someting', async () => {
const wrapper = await mount(<Foo/>);
await flushPromises();
expect(wrapper.instance().bar).toBe(100);
});
Your test also needs to implement async, await.
For ex:
it('should do something', async function() {
const wrapper = shallow(<Foo />);
const result = await wrapper.instance();
expect(result.bar).toBe(100);
});