Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

88 строки
2.2 KiB

  1. import makeCancellablePromise from './index';
  2. jest.useFakeTimers();
  3. describe('makeCancellablePromise()', () => {
  4. function resolveInFiveSeconds() {
  5. return new Promise((resolve) => {
  6. setTimeout(() => {
  7. resolve('Success');
  8. }, 5000);
  9. });
  10. }
  11. function rejectInFiveSeconds() {
  12. return new Promise((resolve, reject) => {
  13. setTimeout(() => {
  14. reject(new Error('Error'));
  15. }, 5000);
  16. });
  17. }
  18. it('resolves promise if not cancelled', async () => {
  19. const resolve = jest.fn();
  20. const reject = jest.fn();
  21. const { promise } = makeCancellablePromise(resolveInFiveSeconds());
  22. jest.advanceTimersByTime(5000);
  23. await promise.then(resolve).catch(reject);
  24. expect(resolve).toHaveBeenCalledWith('Success');
  25. expect(reject).not.toHaveBeenCalled();
  26. });
  27. it('rejects promise if not cancelled', async () => {
  28. const resolve = jest.fn();
  29. const reject = jest.fn();
  30. const { promise } = makeCancellablePromise(rejectInFiveSeconds());
  31. jest.runAllTimers();
  32. await promise.then(resolve).catch(reject);
  33. expect(resolve).not.toHaveBeenCalled();
  34. expect(reject).toHaveBeenCalledWith(expect.any(Error));
  35. });
  36. it('does not resolve promise if cancelled', async () => {
  37. expect.assertions(0);
  38. const resolve = jest.fn(() => {
  39. // Will fail because of expect.assertions(0);
  40. expect(true).toBe(true);
  41. });
  42. const reject = jest.fn(() => {
  43. // Will fail because of expect.assertions(0);
  44. expect(true).toBe(true);
  45. });
  46. const { promise, cancel } = makeCancellablePromise(rejectInFiveSeconds());
  47. promise.then(resolve).catch(reject);
  48. jest.advanceTimersByTime(2500);
  49. cancel();
  50. jest.advanceTimersByTime(2500);
  51. });
  52. it('does not reject promise if cancelled', () => {
  53. expect.assertions(0);
  54. const resolve = jest.fn(() => {
  55. // Will fail because of expect.assertions(0);
  56. expect(true).toBe(true);
  57. });
  58. const reject = jest.fn(() => {
  59. // Will fail because of expect.assertions(0);
  60. expect(true).toBe(true);
  61. });
  62. const { promise, cancel } = makeCancellablePromise(rejectInFiveSeconds());
  63. promise.then(resolve).catch(reject);
  64. jest.advanceTimersByTime(2500);
  65. cancel();
  66. jest.advanceTimersByTime(2500);
  67. });
  68. });