




















@@ -65,6 +65,20 @@ function requireRecord(value: unknown, label: string): Record<string, unknown> {
6565return value as Record<string, unknown>;
6666}
676768+type MockWithCalls = { mock: { calls: unknown[][] } };
69+70+function firstMockCall(mock: MockWithCalls, label: string): unknown[] {
71+const call = mock.mock.calls.at(0);
72+if (!call) {
73+throw new Error(`expected ${label} call`);
74+}
75+return call;
76+}
77+78+function firstMockArg(mock: MockWithCalls, label: string) {
79+return firstMockCall(mock, label)[0];
80+}
81+6882function discordTestSendResult(messageId: string, channelId = "dm-channel") {
6983return {
7084 messageId,
@@ -318,7 +332,9 @@ describe("discord component interactions", () => {
318332expect(reply).toHaveBeenCalledWith({ content: "✓", ephemeral: true });
319333expect(lastDispatchCtx?.BodyForAgent).toBe('Clicked "Approve".');
320334expect(dispatchReplyMock).toHaveBeenCalledTimes(1);
321-const dispatchParams = dispatchReplyMock.mock.calls[0]?.[0] as DispatchParams | undefined;
335+const dispatchParams = firstMockArg(dispatchReplyMock, "dispatchReplyMock") as
336+| DispatchParams
337+| undefined;
322338expect(typeof dispatchParams?.dispatcherOptions.responsePrefixContextProvider).toBe("function");
323339expect(typeof dispatchParams?.replyOptions?.onModelSelected).toBe("function");
324340expect(resolveDiscordComponentEntry({ id: "btn_1" })).toBeNull();
@@ -866,8 +882,10 @@ describe("discord component interactions", () => {
866882867883expect(acknowledge).toHaveBeenCalledTimes(1);
868884expect(editDiscordComponentMessageMock).toHaveBeenCalledTimes(1);
869-const [target, messageId, payload, options] =
870-editDiscordComponentMessageMock.mock.calls[0] ?? [];
885+const [target, messageId, payload, options] = firstMockCall(
886+editDiscordComponentMessageMock,
887+"editDiscordComponentMessageMock",
888+);
871889expect(target).toBe("user:123456789");
872890expect(messageId).toBe("msg-1");
873891expect(typeof (payload as { text?: unknown } | undefined)?.text).toBe("string");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。