throttled-property-hoc.test.jsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import React from 'react';
  2. import {mount} from 'enzyme';
  3. import ThrottledPropertyHOC from '../../../src/lib/throttled-property-hoc.jsx';
  4. describe('VMListenerHOC', () => {
  5. let mounted;
  6. const throttleTime = 500;
  7. beforeEach(() => {
  8. const Component = ({propToThrottle, doNotThrottle}) => (
  9. <input
  10. name={doNotThrottle}
  11. value={propToThrottle}
  12. />
  13. );
  14. const WrappedComponent = ThrottledPropertyHOC('propToThrottle', throttleTime)(Component);
  15. global.Date.now = () => 0;
  16. mounted = mount(
  17. <WrappedComponent
  18. doNotThrottle="oldvalue"
  19. propToThrottle={0}
  20. />
  21. );
  22. });
  23. test('it passes the props on initial render ', () => {
  24. expect(mounted.find('[value=0]').exists()).toEqual(true);
  25. expect(mounted.find('[name="oldvalue"]').exists()).toEqual(true);
  26. });
  27. test('it does not rerender if throttled prop is updated too soon', () => {
  28. global.Date.now = () => throttleTime / 2;
  29. mounted.setProps({propToThrottle: 1});
  30. mounted.update();
  31. expect(mounted.find('[value=0]').exists()).toEqual(true);
  32. });
  33. test('it does rerender if throttled prop is updated after throttle timeout', () => {
  34. global.Date.now = () => throttleTime * 2;
  35. mounted.setProps({propToThrottle: 1});
  36. mounted.update();
  37. expect(mounted.find('[value=1]').exists()).toEqual(true);
  38. });
  39. test('it does rerender if a non-throttled prop is changed', () => {
  40. global.Date.now = () => throttleTime / 2;
  41. mounted.setProps({doNotThrottle: 'newvalue', propToThrottle: 2});
  42. mounted.update();
  43. expect(mounted.find('[name="newvalue"]').exists()).toEqual(true);
  44. expect(mounted.find('[value=2]').exists()).toEqual(true);
  45. });
  46. });