lazyLoad.spec.jsx 2.0 KB

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