


























@@ -58,6 +58,21 @@ function findWarningPayload(message: string): Record<string, unknown> | undefine
5858return payload && typeof payload === "object" ? (payload as Record<string, unknown>) : undefined;
5959}
606061+function requireFirstCallArg(
62+mock: { mock: { calls: readonly unknown[][] } },
63+label: string,
64+): Record<string, unknown> {
65+const [call] = mock.mock.calls;
66+if (!call) {
67+throw new Error(`expected ${label} call`);
68+}
69+const [arg] = call;
70+if (typeof arg !== "object" || arg === null || Array.isArray(arg)) {
71+throw new Error(`expected ${label} params to be an object`);
72+}
73+return arg as Record<string, unknown>;
74+}
75+6176describe("detached-task-runtime", () => {
6277afterEach(() => {
6378resetDetachedTaskLifecycleRuntimeForTests();
@@ -130,32 +145,38 @@ describe("detached-task-runtime", () => {
130145taskId: runningTask.taskId,
131146});
132147133-const queuedArgs = vi.mocked(fakeRuntime.createQueuedTaskRun).mock.calls[0]?.[0];
134-expect(queuedArgs?.runId).toBe("run-queued");
135-expect(queuedArgs?.task).toBe("Queue task");
136-const runningArgs = vi.mocked(fakeRuntime.createRunningTaskRun).mock.calls[0]?.[0];
137-expect(runningArgs?.runId).toBe("run-running");
138-expect(runningArgs?.task).toBe("Run task");
139-const startArgs = vi.mocked(fakeRuntime.startTaskRunByRunId).mock.calls[0]?.[0];
140-expect(startArgs?.runId).toBe("run-running");
141-expect(startArgs?.startedAt).toBe(10);
142-const progressArgs = vi.mocked(fakeRuntime.recordTaskRunProgressByRunId).mock.calls[0]?.[0];
143-expect(progressArgs?.runId).toBe("run-running");
144-expect(progressArgs?.lastEventAt).toBe(20);
148+const queuedArgs = requireFirstCallArg(vi.mocked(fakeRuntime.createQueuedTaskRun), "queued");
149+expect(queuedArgs.runId).toBe("run-queued");
150+expect(queuedArgs.task).toBe("Queue task");
151+const runningArgs = requireFirstCallArg(vi.mocked(fakeRuntime.createRunningTaskRun), "running");
152+expect(runningArgs.runId).toBe("run-running");
153+expect(runningArgs.task).toBe("Run task");
154+const startArgs = requireFirstCallArg(vi.mocked(fakeRuntime.startTaskRunByRunId), "start");
155+expect(startArgs.runId).toBe("run-running");
156+expect(startArgs.startedAt).toBe(10);
157+const progressArgs = requireFirstCallArg(
158+vi.mocked(fakeRuntime.recordTaskRunProgressByRunId),
159+"progress",
160+);
161+expect(progressArgs.runId).toBe("run-running");
162+expect(progressArgs.lastEventAt).toBe(20);
145163const finalizeMock = fakeRuntime.finalizeTaskRunByRunId;
146164if (!finalizeMock) {
147165throw new Error("Expected fake runtime finalizer");
148166}
149-const finalizeArgs = vi.mocked(finalizeMock).mock.calls[0]?.[0];
150-expect(finalizeArgs?.runId).toBe("run-running");
151-expect(finalizeArgs?.status).toBe("succeeded");
152-expect(finalizeArgs?.endedAt).toBe(25);
153-const completeArgs = vi.mocked(fakeRuntime.completeTaskRunByRunId).mock.calls[0]?.[0];
154-expect(completeArgs?.runId).toBe("run-running");
155-expect(completeArgs?.endedAt).toBe(30);
156-const failArgs = vi.mocked(fakeRuntime.failTaskRunByRunId).mock.calls[0]?.[0];
157-expect(failArgs?.runId).toBe("run-running");
158-expect(failArgs?.endedAt).toBe(40);
167+const finalizeArgs = requireFirstCallArg(vi.mocked(finalizeMock), "finalize");
168+expect(finalizeArgs.runId).toBe("run-running");
169+expect(finalizeArgs.status).toBe("succeeded");
170+expect(finalizeArgs.endedAt).toBe(25);
171+const completeArgs = requireFirstCallArg(
172+vi.mocked(fakeRuntime.completeTaskRunByRunId),
173+"complete",
174+);
175+expect(completeArgs.runId).toBe("run-running");
176+expect(completeArgs.endedAt).toBe(30);
177+const failArgs = requireFirstCallArg(vi.mocked(fakeRuntime.failTaskRunByRunId), "fail");
178+expect(failArgs.runId).toBe("run-running");
179+expect(failArgs.endedAt).toBe(40);
159180const deliveryArgs = vi.mocked(fakeRuntime.setDetachedTaskDeliveryStatusByRunId).mock
160181.calls[0]?.[0];
161182expect(deliveryArgs?.runId).toBe("run-running");
@@ -200,16 +221,14 @@ describe("detached-task-runtime", () => {
200221finalizeTaskRunByRunId({ runId: "legacy-ok", status: "succeeded", endedAt: 10 });
201222finalizeTaskRunByRunId({ runId: "legacy-timeout", status: "timed_out", endedAt: 20 });
202223203-const completeArgs = completeTaskRunByRunIdSpy.mock.calls[0]?.[0] as
204-| Parameters<typeof finalizeTaskRunByRunId>[0]
205-| undefined;
206-expect(completeArgs?.runId).toBe("legacy-ok");
207-expect(completeArgs?.status).toBe("succeeded");
208-expect(completeArgs?.endedAt).toBe(10);
209-const failArgs = failTaskRunByRunIdSpy.mock.calls[0]?.[0];
210-expect(failArgs?.runId).toBe("legacy-timeout");
211-expect(failArgs?.status).toBe("timed_out");
212-expect(failArgs?.endedAt).toBe(20);
224+const completeArgs = requireFirstCallArg(completeTaskRunByRunIdSpy, "legacy complete");
225+expect(completeArgs.runId).toBe("legacy-ok");
226+expect(completeArgs.status).toBe("succeeded");
227+expect(completeArgs.endedAt).toBe(10);
228+const failArgs = requireFirstCallArg(failTaskRunByRunIdSpy, "legacy fail");
229+expect(failArgs.runId).toBe("legacy-timeout");
230+expect(failArgs.status).toBe("timed_out");
231+expect(failArgs.endedAt).toBe(20);
213232});
214233215234describe("tryRecoverTaskBeforeMarkLost", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。