

























@@ -62,22 +62,12 @@ describeLive("anthropic transport stream live", () => {
6262const abortReason = new Error("live anthropic stream abort");
6363let requestBody = "";
6464let requestBodyPromise: Promise<string> | undefined;
65-let connectionClosed = false;
66-let resolveConnectionClosed: (() => void) | undefined;
67-const connectionClosedPromise = new Promise<void>((resolve) => {
68-resolveConnectionClosed = resolve;
65+let resolveResponseStarted: (() => void) | undefined;
66+const responseStartedPromise = new Promise<void>((resolve) => {
67+resolveResponseStarted = resolve;
6968});
70697170const server = http.createServer((request, response) => {
72-const markConnectionClosed = () => {
73-connectionClosed = true;
74-resolveConnectionClosed?.();
75-};
76-request.on("aborted", markConnectionClosed);
77-request.on("close", markConnectionClosed);
78-response.on("close", () => {
79-markConnectionClosed();
80-});
8171requestBodyPromise = readRequestBody(request).then((body) => {
8272requestBody = body;
8373response.writeHead(200, {
@@ -87,13 +77,13 @@ describeLive("anthropic transport stream live", () => {
8777response.write(
8878'data: {"type":"message_start","message":{"id":"msg_live","usage":{"input_tokens":1,"output_tokens":0}}}\n\n',
8979);
80+resolveResponseStarted?.();
9081return body;
9182});
9283});
93849485const port = await waitForServerListening(server);
9586try {
96-setTimeout(() => controller.abort(abortReason), 50);
9787const model: AnthropicMessagesModel = {
9888id: "claude-sonnet-4-6",
9989name: "Claude Sonnet 4.6",
@@ -118,19 +108,21 @@ describeLive("anthropic transport stream live", () => {
118108),
119109);
120110111+const responseStarted = await Promise.race([
112+responseStartedPromise.then(() => true),
113+delay(1_000, false),
114+]);
115+expect(responseStarted).toBe(true);
116+controller.abort(abortReason);
117+121118const timedOut = Symbol("timed out");
122119const result = await Promise.race([stream.result(), delay(1_000, timedOut)]);
123120if (result === timedOut) {
124121throw new Error("Anthropic live SSE stream did not abort within 1000ms");
125122}
126-const observedConnectionClose = await Promise.race([
127-connectionClosedPromise.then(() => true),
128-delay(2_000, false),
129-]);
130123131124expect(result.stopReason).toBe("aborted");
132125expect(result.errorMessage).toBe("live anthropic stream abort");
133-expect(observedConnectionClose || connectionClosed).toBe(true);
134126const capturedRequestBody = requestBodyPromise
135127 ? await Promise.race([requestBodyPromise, delay(500, requestBody)])
136128 : requestBody;
@@ -141,6 +133,9 @@ describeLive("anthropic transport stream live", () => {
141133});
142134}
143135} finally {
136+if (!controller.signal.aborted) {
137+controller.abort(abortReason);
138+}
144139await closeServer(server);
145140}
146141}, 10_000);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。