lazyLoad.spec.jsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import React from 'react';
  2. import {shallow, mount} from 'enzyme';
  3. import LazyLoad from 'app/components/lazyLoad';
  4. describe('LazyLoad', function() {
  5. it('renders with a loading indicator when promise is not resolved yet', function() {
  6. let promise = new Promise((resolve, reject) => {});
  7. let getComponent = () => promise;
  8. let wrapper = shallow(<LazyLoad component={getComponent} />);
  9. // Should be loading
  10. expect(wrapper.find('LoadingIndicator')).toHaveLength(1);
  11. });
  12. it('renders when given a promise of a "button" component', async function() {
  13. let res;
  14. let promise = new Promise((resolve, reject) => {
  15. res = resolve;
  16. });
  17. let getComponent = () => promise;
  18. let wrapper = mount(<LazyLoad component={getComponent} />);
  19. // Should be loading
  20. expect(wrapper.find('LoadingIndicator')).toHaveLength(1);
  21. // resolve with button
  22. let ResolvedComponent = 'button';
  23. res(ResolvedComponent);
  24. await promise;
  25. // Need to wait for `retryableImport` to resolve
  26. await tick();
  27. wrapper.update();
  28. expect(wrapper.state('Component')).toEqual('button');
  29. expect(wrapper.find('button')).toHaveLength(1);
  30. expect(wrapper.find('LoadingIndicator')).toHaveLength(0);
  31. });
  32. it('renders with error message when promise is rejected', async function() {
  33. // eslint-disable-next-line no-console
  34. console.error = jest.fn();
  35. let getComponent = jest.fn(
  36. () =>
  37. new Promise((resolve, reject) => reject(new Error('Could not load component')))
  38. );
  39. let wrapper;
  40. try {
  41. wrapper = mount(<LazyLoad component={getComponent} />);
  42. } catch (err) {
  43. // ignore
  44. }
  45. // Need to wait for `retryableImport` to resolve
  46. await tick();
  47. wrapper.update();
  48. expect(wrapper.find('LoadingIndicator')).toHaveLength(0);
  49. expect(wrapper.find('LoadingError')).toHaveLength(1);
  50. // eslint-disable-next-line no-console
  51. expect(console.error).toHaveBeenCalled();
  52. // eslint-disable-next-line no-console
  53. console.error.mockRestore();
  54. });
  55. });