feat: 完成测试 16-17

This commit is contained in:
claude-code-best
2026-04-02 16:03:20 +08:00
parent 1086f68381
commit 8697c91668
18 changed files with 2435 additions and 0 deletions

View File

@@ -0,0 +1,106 @@
import { describe, expect, test } from "bun:test";
import {
createAbortController,
createChildAbortController,
} from "../abortController";
describe("createAbortController", () => {
test("returns an AbortController that is not aborted", () => {
const controller = createAbortController();
expect(controller.signal.aborted).toBe(false);
});
test("aborting the controller sets signal.aborted", () => {
const controller = createAbortController();
controller.abort();
expect(controller.signal.aborted).toBe(true);
});
test("abort reason is propagated", () => {
const controller = createAbortController();
controller.abort("custom reason");
expect(controller.signal.reason).toBe("custom reason");
});
test("accepts custom maxListeners without error", () => {
const controller = createAbortController(100);
expect(controller.signal.aborted).toBe(false);
});
});
describe("createChildAbortController", () => {
test("child is not aborted initially", () => {
const parent = createAbortController();
const child = createChildAbortController(parent);
expect(child.signal.aborted).toBe(false);
expect(parent.signal.aborted).toBe(false);
});
test("parent abort propagates to child", () => {
const parent = createAbortController();
const child = createChildAbortController(parent);
parent.abort("parent reason");
expect(child.signal.aborted).toBe(true);
expect(child.signal.reason).toBe("parent reason");
});
test("child abort does NOT propagate to parent", () => {
const parent = createAbortController();
const child = createChildAbortController(parent);
child.abort("child reason");
expect(child.signal.aborted).toBe(true);
expect(parent.signal.aborted).toBe(false);
});
test("already-aborted parent immediately aborts child", () => {
const parent = createAbortController();
parent.abort("pre-abort");
const child = createChildAbortController(parent);
expect(child.signal.aborted).toBe(true);
expect(child.signal.reason).toBe("pre-abort");
});
test("multiple children are independent", () => {
const parent = createAbortController();
const child1 = createChildAbortController(parent);
const child2 = createChildAbortController(parent);
child1.abort("child1");
expect(child1.signal.aborted).toBe(true);
expect(child2.signal.aborted).toBe(false);
// Aborting child1 did not affect child2 or parent
expect(parent.signal.aborted).toBe(false);
});
test("parent abort propagates to all children", () => {
const parent = createAbortController();
const child1 = createChildAbortController(parent);
const child2 = createChildAbortController(parent);
parent.abort("all go down");
expect(child1.signal.aborted).toBe(true);
expect(child2.signal.aborted).toBe(true);
});
test("grandchild abort propagation", () => {
const grandparent = createAbortController();
const parent = createChildAbortController(grandparent);
const child = createChildAbortController(parent);
grandparent.abort("chain");
expect(parent.signal.aborted).toBe(true);
expect(child.signal.aborted).toBe(true);
});
test("child abort then parent abort — child stays aborted with original reason", () => {
const parent = createAbortController();
const child = createChildAbortController(parent);
child.abort("child first");
parent.abort("parent later");
expect(child.signal.reason).toBe("child first");
expect(parent.signal.reason).toBe("parent later");
});
test("accepts custom maxListeners for child", () => {
const parent = createAbortController();
const child = createChildAbortController(parent, 200);
expect(child.signal.aborted).toBe(false);
});
});