refactor(tests): share harnesses for cli and monitor fixtures

This commit is contained in:
Peter Steinberger
2026-02-16 17:06:20 +00:00
parent b991919755
commit c37f65a449
5 changed files with 119 additions and 255 deletions

View File

@@ -1,6 +1,31 @@
import { describe, expect, it, vi } from "vitest";
import { resolveFetch, wrapFetchWithAbortSignal } from "./fetch.js";
function createForeignSignalHarness() {
let abortHandler: (() => void) | null = null;
const removeEventListener = vi.fn((event: string, handler: () => void) => {
if (event === "abort" && abortHandler === handler) {
abortHandler = null;
}
});
const fakeSignal = {
aborted: false,
addEventListener: (event: string, handler: () => void) => {
if (event === "abort") {
abortHandler = handler;
}
},
removeEventListener,
} as AbortSignal;
return {
fakeSignal,
removeEventListener,
triggerAbort: () => abortHandler?.(),
};
}
describe("wrapFetchWithAbortSignal", () => {
it("adds duplex for requests with a body", async () => {
let seenInit: RequestInit | undefined;
@@ -25,27 +50,14 @@ describe("wrapFetchWithAbortSignal", () => {
const wrapped = wrapFetchWithAbortSignal(fetchImpl);
let abortHandler: (() => void) | null = null;
const fakeSignal = {
aborted: false,
addEventListener: (event: string, handler: () => void) => {
if (event === "abort") {
abortHandler = handler;
}
},
removeEventListener: (event: string, handler: () => void) => {
if (event === "abort" && abortHandler === handler) {
abortHandler = null;
}
},
} as AbortSignal;
const { fakeSignal, triggerAbort } = createForeignSignalHarness();
const promise = wrapped("https://example.com", { signal: fakeSignal });
expect(fetchImpl).toHaveBeenCalledOnce();
expect(seenSignal).toBeInstanceOf(AbortSignal);
expect(seenSignal).not.toBe(fakeSignal);
abortHandler?.();
triggerAbort();
expect(seenSignal?.aborted).toBe(true);
await promise;
@@ -64,22 +76,7 @@ describe("wrapFetchWithAbortSignal", () => {
);
const wrapped = wrapFetchWithAbortSignal(fetchImpl);
let abortHandler: (() => void) | null = null;
const removeEventListener = vi.fn((event: string, handler: () => void) => {
if (event === "abort" && abortHandler === handler) {
abortHandler = null;
}
});
const fakeSignal = {
aborted: false,
addEventListener: (event: string, handler: () => void) => {
if (event === "abort") {
abortHandler = handler;
}
},
removeEventListener,
} as AbortSignal;
const { fakeSignal, removeEventListener } = createForeignSignalHarness();
try {
await expect(wrapped("https://example.com", { signal: fakeSignal })).rejects.toBe(fetchError);
@@ -100,22 +97,7 @@ describe("wrapFetchWithAbortSignal", () => {
});
const wrapped = wrapFetchWithAbortSignal(fetchImpl);
let abortHandler: (() => void) | null = null;
const removeEventListener = vi.fn((event: string, handler: () => void) => {
if (event === "abort" && abortHandler === handler) {
abortHandler = null;
}
});
const fakeSignal = {
aborted: false,
addEventListener: (event: string, handler: () => void) => {
if (event === "abort") {
abortHandler = handler;
}
},
removeEventListener,
} as AbortSignal;
const { fakeSignal, removeEventListener } = createForeignSignalHarness();
expect(() => wrapped("https://example.com", { signal: fakeSignal })).toThrow(syncError);
expect(removeEventListener).toHaveBeenCalledOnce();