You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 3 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. });