import React from 'react'; import {shallow, mount} from 'enzyme'; import LazyLoad from 'app/components/lazyLoad'; describe('LazyLoad', function() { it('renders with a loading indicator when promise is not resolved yet', function() { let promise = new Promise((resolve, reject) => {}); let getComponent = () => promise; let wrapper = shallow(); // Should be loading expect(wrapper.find('LoadingIndicator')).toHaveLength(1); }); it('renders when given a promise of a "button" component', async function() { let res; let promise = new Promise((resolve, reject) => { res = resolve; }); let getComponent = () => promise; let wrapper = mount(); // Should be loading expect(wrapper.find('LoadingIndicator')).toHaveLength(1); // resolve with button let ResolvedComponent = 'button'; res(ResolvedComponent); await promise; // Need to wait for `retryableImport` to resolve await tick(); wrapper.update(); expect(wrapper.state('Component')).toEqual('button'); expect(wrapper.find('button')).toHaveLength(1); expect(wrapper.find('LoadingIndicator')).toHaveLength(0); }); it('renders with error message when promise is rejected', async function() { // eslint-disable-next-line no-console console.error = jest.fn(); let getComponent = jest.fn( () => new Promise((resolve, reject) => reject(new Error('Could not load component'))) ); let wrapper; try { wrapper = mount(); } catch (err) { // ignore } // Need to wait for `retryableImport` to resolve await tick(); wrapper.update(); expect(wrapper.find('LoadingIndicator')).toHaveLength(0); expect(wrapper.find('LoadingError')).toHaveLength(1); // eslint-disable-next-line no-console expect(console.error).toHaveBeenCalled(); // eslint-disable-next-line no-console console.error.mockRestore(); }); });