




















@@ -134,8 +134,28 @@ function expectRecordFields(value: unknown, label: string, expected: Record<stri
134134}
135135}
136136137+function requireMockCall(mock: ReturnType<typeof vi.fn>, callIndex: number): unknown[] {
138+const call = mock.mock.calls[callIndex];
139+if (!call) {
140+throw new Error(`expected mock call #${callIndex + 1}`);
141+}
142+return call;
143+}
144+145+function requireMockCallArgValue(
146+mock: ReturnType<typeof vi.fn>,
147+callIndex: number,
148+argIndex: number,
149+) {
150+const call = requireMockCall(mock, callIndex);
151+if (argIndex >= call.length) {
152+throw new Error(`expected mock call #${callIndex + 1} argument #${argIndex + 1}`);
153+}
154+return call[argIndex];
155+}
156+137157function requireMockCallArg(mock: ReturnType<typeof vi.fn>, callIndex: number, argIndex: number) {
138-return requireRecord(mock.mock.calls[callIndex]?.[argIndex], "mock call argument");
158+return requireRecord(requireMockCallArgValue(mock, callIndex, argIndex), "mock call argument");
139159}
140160141161function findSchemaEntry(
@@ -282,8 +302,8 @@ describe("slackPlugin actions", () => {
282302id: "U12345678",
283303});
284304285-expect(sendMessageSlackMock.mock.calls[0]?.[0]).toBe("user:U12345678");
286-expect(String(sendMessageSlackMock.mock.calls[0]?.[1])).toContain("approved");
305+expect(requireMockCallArgValue(sendMessageSlackMock, 0, 0)).toBe("user:U12345678");
306+expect(String(requireMockCallArgValue(sendMessageSlackMock, 0, 1))).toContain("approved");
287307expectRecordFields(requireMockCallArg(sendMessageSlackMock, 0, 2), "send options", {
288308accountId: "work",
289309 cfg,
@@ -356,8 +376,8 @@ describe("slackPlugin actions", () => {
356376threadId: "1712345678.123456",
357377messageId: "1712345678.654321",
358378});
359-expect(handleSlackActionMock.mock.calls[0]?.[1]).toEqual({});
360-expect(handleSlackActionMock.mock.calls[0]?.[2]).toBeUndefined();
379+expect(requireMockCallArgValue(handleSlackActionMock, 0, 1)).toEqual({});
380+expect(requireMockCallArgValue(handleSlackActionMock, 0, 2)).toBeUndefined();
361381});
362382363383it("forwards media access through the bundled Slack action invoke path", async () => {
@@ -390,7 +410,7 @@ describe("slackPlugin actions", () => {
390410filePath: "/tmp/workspace-agent/renders/file.wav",
391411initialComment: "render",
392412});
393-expect(handleSlackActionMock.mock.calls[0]?.[1]).toEqual({});
413+expect(requireMockCallArgValue(handleSlackActionMock, 0, 1)).toEqual({});
394414expectRecordFields(requireMockCallArg(handleSlackActionMock, 0, 2), "Slack action context", {
395415currentChannelId: "C123",
396416replyToMode: "all",
@@ -668,8 +688,8 @@ describe("slackPlugin outbound", () => {
668688deps: { sendSlack },
669689});
670690671-expect(sendSlack.mock.calls[0]?.[0]).toBe("C123");
672-expect(sendSlack.mock.calls[0]?.[1]).toBe("hello");
691+expect(requireMockCallArgValue(sendSlack, 0, 0)).toBe("C123");
692+expect(requireMockCallArgValue(sendSlack, 0, 1)).toBe("hello");
673693expect(requireMockCallArg(sendSlack, 0, 2).threadTs).toBe("1712345678.123456");
674694expect(result).toEqual({ channel: "slack", messageId: "m-text" });
675695});
@@ -689,8 +709,8 @@ describe("slackPlugin outbound", () => {
689709deps: { sendSlack },
690710});
691711692-expect(sendSlack.mock.calls[0]?.[0]).toBe("C999");
693-expect(sendSlack.mock.calls[0]?.[1]).toBe("caption");
712+expect(requireMockCallArgValue(sendSlack, 0, 0)).toBe("C999");
713+expect(requireMockCallArgValue(sendSlack, 0, 1)).toBe("caption");
694714expectRecordFields(requireMockCallArg(sendSlack, 0, 2), "send options", {
695715mediaUrl: "https://example.com/image.png",
696716threadTs: "1712000000.000001",
@@ -712,8 +732,8 @@ describe("slackPlugin outbound", () => {
712732deps: { sendSlack },
713733});
714734715-expect(sendSlack.mock.calls[0]?.[0]).toBe("C123");
716-expect(sendSlack.mock.calls[0]?.[1]).toBe("hello");
735+expect(requireMockCallArgValue(sendSlack, 0, 0)).toBe("C123");
736+expect(requireMockCallArgValue(sendSlack, 0, 1)).toBe("hello");
717737expect(requireMockCallArg(sendSlack, 0, 2).threadTs).toBe("1712345678.123456");
718738expect(result).toEqual({ channel: "slack", messageId: "m-text" });
719739});
@@ -731,8 +751,8 @@ describe("slackPlugin outbound", () => {
731751deps: { sendSlack },
732752});
733753734-expect(sendSlack.mock.calls[0]?.[0]).toBe("C123");
735-expect(sendSlack.mock.calls[0]?.[1]).toBe("hello");
754+expect(requireMockCallArgValue(sendSlack, 0, 0)).toBe("C123");
755+expect(requireMockCallArgValue(sendSlack, 0, 1)).toBe("hello");
736756expect(requireMockCallArg(sendSlack, 0, 2).threadTs).toBeUndefined();
737757});
738758@@ -826,8 +846,8 @@ describe("slackPlugin outbound", () => {
826846deps: { sendSlack },
827847});
828848829-expect(sendSlack.mock.calls[0]?.[0]).toBe("C999");
830-expect(sendSlack.mock.calls[0]?.[1]).toBe("caption");
849+expect(requireMockCallArgValue(sendSlack, 0, 0)).toBe("C999");
850+expect(requireMockCallArgValue(sendSlack, 0, 1)).toBe("caption");
831851expectRecordFields(requireMockCallArg(sendSlack, 0, 2), "send options", {
832852mediaUrl: "/tmp/workspace/image.png",
833853 mediaLocalRoots,
@@ -894,20 +914,20 @@ describe("slackPlugin outbound", () => {
894914});
895915896916expect(sendSlack).toHaveBeenCalledTimes(3);
897-expect(sendSlack.mock.calls[0]?.[0]).toBe("C999");
898-expect(sendSlack.mock.calls[0]?.[1]).toBe("");
917+expect(requireMockCallArgValue(sendSlack, 0, 0)).toBe("C999");
918+expect(requireMockCallArgValue(sendSlack, 0, 1)).toBe("");
899919expectRecordFields(requireMockCallArg(sendSlack, 0, 2), "first media options", {
900920mediaUrl: "https://example.com/1.png",
901921mediaLocalRoots: ["/tmp/media"],
902922});
903-expect(sendSlack.mock.calls[1]?.[0]).toBe("C999");
904-expect(sendSlack.mock.calls[1]?.[1]).toBe("");
923+expect(requireMockCallArgValue(sendSlack, 1, 0)).toBe("C999");
924+expect(requireMockCallArgValue(sendSlack, 1, 1)).toBe("");
905925expectRecordFields(requireMockCallArg(sendSlack, 1, 2), "second media options", {
906926mediaUrl: "https://example.com/2.png",
907927mediaLocalRoots: ["/tmp/media"],
908928});
909-expect(sendSlack.mock.calls[2]?.[0]).toBe("C999");
910-expect(sendSlack.mock.calls[2]?.[1]).toBe("hello");
929+expect(requireMockCallArgValue(sendSlack, 2, 0)).toBe("C999");
930+expect(requireMockCallArgValue(sendSlack, 2, 1)).toBe("hello");
911931expect(requireMockCallArg(sendSlack, 2, 2).blocks).toEqual([
912932{
913933type: "section",
@@ -958,8 +978,8 @@ describe("slackPlugin outbound", () => {
958978deps: { sendSlack },
959979});
960980961-expect(sendSlack.mock.calls[0]?.[0]).toBe("user:U123");
962-expect(sendSlack.mock.calls[0]?.[1]).toBe("Slack interactive smoke.");
981+expect(requireMockCallArgValue(sendSlack, 0, 0)).toBe("user:U123");
982+expect(requireMockCallArgValue(sendSlack, 0, 1)).toBe("Slack interactive smoke.");
963983const blocks = requireArray(requireMockCallArg(sendSlack, 0, 2).blocks, "Slack blocks");
964984expectRecordFields(blocks[0], "text block", { type: "section" });
965985expectRecordFields(blocks[1], "button actions block", { type: "actions" });
@@ -1081,8 +1101,8 @@ describe("slackPlugin outbound new targets", () => {
10811101deps: { sendSlack },
10821102});
108311031084-expect(sendSlack.mock.calls[0]?.[0]).toBe("user:U99NEW");
1085-expect(sendSlack.mock.calls[0]?.[1]).toBe("hello new user");
1104+expect(requireMockCallArgValue(sendSlack, 0, 0)).toBe("user:U99NEW");
1105+expect(requireMockCallArgValue(sendSlack, 0, 1)).toBe("hello new user");
10861106expect(requireMockCallArg(sendSlack, 0, 2).cfg).toBe(cfg);
10871107expect(result).toEqual({ channel: "slack", messageId: "m-new-user", channelId: "D999" });
10881108});
@@ -1099,8 +1119,8 @@ describe("slackPlugin outbound new targets", () => {
10991119deps: { sendSlack },
11001120});
110111211102-expect(sendSlack.mock.calls[0]?.[0]).toBe("channel:C555NEW");
1103-expect(sendSlack.mock.calls[0]?.[1]).toBe("hello channel");
1122+expect(requireMockCallArgValue(sendSlack, 0, 0)).toBe("channel:C555NEW");
1123+expect(requireMockCallArgValue(sendSlack, 0, 1)).toBe("hello channel");
11041124expect(requireMockCallArg(sendSlack, 0, 2).cfg).toBe(cfg);
11051125expect(result).toEqual({ channel: "slack", messageId: "m-new-chan", channelId: "C555" });
11061126});
@@ -1118,8 +1138,8 @@ describe("slackPlugin outbound new targets", () => {
11181138deps: { sendSlack },
11191139});
112011401121-expect(sendSlack.mock.calls[0]?.[0]).toBe("user:U88NEW");
1122-expect(sendSlack.mock.calls[0]?.[1]).toBe("here is a file");
1141+expect(requireMockCallArgValue(sendSlack, 0, 0)).toBe("user:U88NEW");
1142+expect(requireMockCallArgValue(sendSlack, 0, 1)).toBe("here is a file");
11231143expectRecordFields(requireMockCallArg(sendSlack, 0, 2), "send options", {
11241144 cfg,
11251145mediaUrl: "https://example.com/file.png",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。