

























@@ -12,6 +12,8 @@ import {
1212} from "./pi-embedded-subscribe.openai-responses.test-helpers.js";
13131414type TextEndBlockReplyHarness = ReturnType<typeof createTextEndBlockReplyHarness>;
15+type OnBlockReplyMock = ReturnType<typeof vi.fn>;
16+type BlockReplyPayload = { text?: string };
15171618function emitOpenAiResponsesTextEvent(params: {
1719emit: TextEndBlockReplyHarness["emit"];
@@ -89,15 +91,27 @@ async function emitSuppressedCommentary(params: {
8991}
90929193function expectSingleBlockReplyText(params: {
92-onBlockReply: ReturnType<typeof vi.fn>;
94+onBlockReply: OnBlockReplyMock;
9395subscription: TextEndBlockReplyHarness["subscription"];
9496text: string;
9597}) {
9698expect(params.onBlockReply).toHaveBeenCalledTimes(1);
97-expect(params.onBlockReply.mock.calls.at(0)?.[0]?.text).toBe(params.text);
99+expect(requireBlockReplyPayload(params.onBlockReply).text).toBe(params.text);
98100expect(params.subscription.assistantTexts).toEqual([params.text]);
99101}
100102103+function requireBlockReplyPayload(onBlockReply: OnBlockReplyMock): BlockReplyPayload {
104+const call = onBlockReply.mock.calls[0];
105+if (!call) {
106+throw new Error("expected first block reply call");
107+}
108+const payload = call[0];
109+if (!payload || typeof payload !== "object") {
110+throw new Error("expected first block reply payload");
111+}
112+return payload as BlockReplyPayload;
113+}
114+101115describe("subscribeEmbeddedPiSession", () => {
102116it("emits block replies on text_end and does not duplicate on message_end", async () => {
103117const onBlockReply = vi.fn();
@@ -110,7 +124,7 @@ describe("subscribeEmbeddedPiSession", () => {
110124await vi.waitFor(() => {
111125expect(onBlockReply).toHaveBeenCalledTimes(1);
112126});
113-const payload = onBlockReply.mock.calls.at(0)?.[0];
127+const payload = requireBlockReplyPayload(onBlockReply);
114128expect(payload?.text).toBe("Hello block");
115129expect(subscription.assistantTexts).toEqual(["Hello block"]);
116130@@ -147,7 +161,7 @@ describe("subscribeEmbeddedPiSession", () => {
147161await vi.waitFor(() => {
148162expect(onBlockReply).toHaveBeenCalledTimes(1);
149163});
150-expect(onBlockReply.mock.calls.at(0)?.[0]?.text).toBe("Final visible reply.");
164+expect(requireBlockReplyPayload(onBlockReply).text).toBe("Final visible reply.");
151165expect(subscription.assistantTexts).toEqual(["Final visible reply."]);
152166});
153167@@ -198,7 +212,7 @@ describe("subscribeEmbeddedPiSession", () => {
198212await Promise.resolve();
199213200214expect(onBlockReply).toHaveBeenCalledTimes(1);
201-expect(onBlockReply.mock.calls.at(0)?.[0]?.text).toBe("Legacy answer");
215+expect(requireBlockReplyPayload(onBlockReply).text).toBe("Legacy answer");
202216expect(subscription.assistantTexts).toEqual(["Legacy answer"]);
203217204218emit({
@@ -260,7 +274,7 @@ describe("subscribeEmbeddedPiSession", () => {
260274await Promise.resolve();
261275262276expect(onBlockReply).toHaveBeenCalledTimes(1);
263-expect(onBlockReply.mock.calls.at(0)?.[0]?.text).toBe("Hello world");
277+expect(requireBlockReplyPayload(onBlockReply).text).toBe("Hello world");
264278expect(subscription.assistantTexts).toEqual(["Hello world"]);
265279});
266280@@ -286,7 +300,7 @@ describe("subscribeEmbeddedPiSession", () => {
286300await Promise.resolve();
287301288302expect(onBlockReply).toHaveBeenCalledTimes(1);
289-expect(onBlockReply.mock.calls.at(0)?.[0]?.text).toBe("Done.");
303+expect(requireBlockReplyPayload(onBlockReply).text).toBe("Done.");
290304expect(subscription.assistantTexts).toEqual(["Done."]);
291305});
292306此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。