




















@@ -10,7 +10,19 @@ function createHarness(params: {
1010return createSlackOutboundPayloadHarness(params);
1111}
121213-function sendOptions(call: unknown[] | undefined): {
13+type MockWithCalls = {
14+mock: { calls: unknown[][] };
15+};
16+17+function sendCall(sendMock: MockWithCalls, index: number): unknown[] {
18+const call = sendMock.mock.calls[index];
19+if (!call) {
20+throw new Error(`expected Slack send call ${index}`);
21+}
22+return call;
23+}
24+25+function sendOptions(call: unknown[]): {
1426blocks?: Array<{
1527block_id?: string;
1628elements?: Array<{ action_id?: string }>;
@@ -44,9 +56,9 @@ describe("slackOutbound sendPayload", () => {
4456const result = await run();
45574658expect(sendMock).toHaveBeenCalledTimes(1);
47-const call = sendMock.mock.calls[0];
48-expect(call?.[0]).toBe(to);
49-expect(call?.[1]).toBe("Fallback summary");
59+const call = sendCall(sendMock, 0);
60+expect(call[0]).toBe(to);
61+expect(call[1]).toBe("Fallback summary");
5062expect(sendOptions(call).blocks).toEqual([{ type: "divider" }]);
5163expect(result.channel).toBe("slack");
5264expect(result.messageId).toBe("sl-1");
@@ -72,14 +84,14 @@ describe("slackOutbound sendPayload", () => {
7284const result = await run();
73857486expect(sendMock).toHaveBeenCalledTimes(2);
75-const mediaCall = sendMock.mock.calls[0];
76-expect(mediaCall?.[0]).toBe(to);
77-expect(mediaCall?.[1]).toBe("");
87+const mediaCall = sendCall(sendMock, 0);
88+expect(mediaCall[0]).toBe(to);
89+expect(mediaCall[1]).toBe("");
7890expect(sendOptions(mediaCall).mediaUrl).toBe("https://example.com/image.png");
79-expect(mediaCall?.[2]).not.toHaveProperty("blocks");
80-const controlsCall = sendMock.mock.calls[1];
81-expect(controlsCall?.[0]).toBe(to);
82-expect(controlsCall?.[1]).toBe("Approval required");
91+expect(mediaCall[2]).not.toHaveProperty("blocks");
92+const controlsCall = sendCall(sendMock, 1);
93+expect(controlsCall[0]).toBe(to);
94+expect(controlsCall[1]).toBe("Approval required");
8395expect(sendOptions(controlsCall).blocks?.[0]?.type).toBe("actions");
8496expect(result.channel).toBe("slack");
8597expect(result.messageId).toBe("sl-controls");
@@ -141,9 +153,9 @@ describe("slackOutbound sendPayload", () => {
141153await run();
142154143155expect(sendMock).toHaveBeenCalledTimes(1);
144-const call = sendMock.mock.calls[0];
145-expect(call?.[0]).toBe(to);
146-expect(call?.[1]).toBe("Deploy?");
156+const call = sendCall(sendMock, 0);
157+expect(call[0]).toBe(to);
158+expect(call[1]).toBe("Deploy?");
147159const blocks = sendOptions(call).blocks;
148160expect(blocks?.[0]?.block_id).toBe("openclaw_reply_buttons_1");
149161expect(blocks?.[1]?.block_id).toBe("openclaw_reply_buttons_2");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。