abort-controller.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. const { AbortController } = require("../index.js");
  2. describe("AbortController", function () {
  3. it("should call abort handlers once", function () {
  4. const controller = new AbortController();
  5. const signal = controller.signal;
  6. const handler = jest.fn();
  7. expect(signal.onabort).toBeNull();
  8. expect(signal.aborted).toBe(false);
  9. expect(signal.reason).toBeUndefined();
  10. signal.onabort = jest.fn();
  11. signal.addEventListener("abort", handler);
  12. controller.abort();
  13. expect(signal.aborted).toBe(true);
  14. expect(signal.reason).toEqual(new Error("AbortError"));
  15. expect(handler).toBeCalledTimes(1);
  16. expect(handler).toBeCalledWith({ type: "abort", target: signal });
  17. expect(signal.onabort).toBeCalledTimes(1);
  18. expect(signal.onabort).toBeCalledWith({ type: "abort", target: signal });
  19. jest.clearAllMocks();
  20. controller.abort();
  21. expect(signal.aborted).toBe(true);
  22. expect(signal.reason).toEqual(new Error("AbortError"));
  23. expect(handler).not.toBeCalled();
  24. expect(signal.onabort).not.toBeCalled();
  25. });
  26. it("should use custom abort reason", () => {
  27. const controller = new AbortController();
  28. const signal = controller.signal;
  29. expect(signal.aborted).toBe(false);
  30. expect(signal.reason).toBeUndefined();
  31. const customReason = new Error("Custom Reason");
  32. controller.abort(customReason);
  33. expect(signal.aborted).toBe(true);
  34. expect(signal.reason).toBe(customReason);
  35. });
  36. });