



























@@ -21,6 +21,12 @@ function createDeferred<T = void>() {
2121return { promise, resolve };
2222}
232324+async function flushQueueWork(): Promise<void> {
25+for (let i = 0; i < 40; i += 1) {
26+await Promise.resolve();
27+}
28+}
29+2430function createMessageData(messageId: string, channelId = "ch-1") {
2531return {
2632channel_id: channelId,
@@ -148,9 +154,8 @@ async function createLifecycleStopScenario(params: {
148154const { handler, stop } = params.createHandler(setStatus);
149155150156await expect(handler(createMessageData("m-1") as never, {} as never)).resolves.toBeUndefined();
151-await vi.waitFor(() => {
152-expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
153-});
157+await flushQueueWork();
158+expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
154159155160const callsBeforeStop = setStatus.mock.calls.length;
156161stop();
@@ -200,9 +205,8 @@ describe("createDiscordMessageHandler queue behavior", () => {
200205201206await expect(handler(createMessageData("m-1") as never, {} as never)).resolves.toBeUndefined();
202207203-await vi.waitFor(() => {
204-expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
205-});
208+await flushQueueWork();
209+expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
206210expect(setStatus).toHaveBeenCalledWith(
207211expect.objectContaining({
208212activeRuns: 1,
@@ -212,29 +216,26 @@ describe("createDiscordMessageHandler queue behavior", () => {
212216213217await expect(handler(createMessageData("m-2") as never, {} as never)).resolves.toBeUndefined();
214218215-await vi.waitFor(() => {
216-expect(preflightDiscordMessageMock).toHaveBeenCalledTimes(2);
217-});
219+await flushQueueWork();
220+expect(preflightDiscordMessageMock).toHaveBeenCalledTimes(2);
218221expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
219222220223firstRun.resolve();
221224await firstRun.promise;
222225223-await vi.waitFor(() => {
224-expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
225-});
226+await flushQueueWork();
227+expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
226228227229secondRun.resolve();
228230await secondRun.promise;
229231230-await vi.waitFor(() => {
231-expect(setStatus).toHaveBeenLastCalledWith(
232-expect.objectContaining({
233-activeRuns: 0,
234-busy: false,
235-}),
236-);
237-});
232+await flushQueueWork();
233+expect(setStatus).toHaveBeenLastCalledWith(
234+expect.objectContaining({
235+activeRuns: 0,
236+busy: false,
237+}),
238+);
238239});
239240240241it("drops duplicate inbound message deliveries before they reach preflight", async () => {
@@ -247,9 +248,8 @@ describe("createDiscordMessageHandler queue behavior", () => {
247248await expect(handler(duplicate as never, {} as never)).resolves.toBeUndefined();
248249await expect(handler(duplicate as never, {} as never)).resolves.toBeUndefined();
249250250-await vi.waitFor(() => {
251-expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
252-});
251+await flushQueueWork();
252+expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
253253expect(preflightDiscordMessageMock).toHaveBeenCalledTimes(1);
254254});
255255@@ -266,21 +266,17 @@ describe("createDiscordMessageHandler queue behavior", () => {
266266const duplicate = createMessageData("m-retry");
267267268268await expect(handler(duplicate as never, {} as never)).resolves.toBeUndefined();
269-await vi.waitFor(() => {
270-expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
271-});
272-await vi.waitFor(() => {
273-expect(params.runtime.error).toHaveBeenCalledWith(
274-expect.stringContaining(
275-"discord inbound worker failed: DiscordRetryableInboundError: retry me",
276-),
277-);
278-});
269+await flushQueueWork();
270+expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
271+expect(params.runtime.error).toHaveBeenCalledWith(
272+expect.stringContaining(
273+"discord inbound worker failed: DiscordRetryableInboundError: retry me",
274+),
275+);
279276280277await expect(handler(duplicate as never, {} as never)).resolves.toBeUndefined();
281-await vi.waitFor(() => {
282-expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
283-});
278+await flushQueueWork();
279+expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
284280expect(preflightDiscordMessageMock).toHaveBeenCalledTimes(2);
285281});
286282@@ -299,14 +295,11 @@ describe("createDiscordMessageHandler queue behavior", () => {
299295const duplicate = createMessageData("m-fail");
300296301297await expect(handler(duplicate as never, {} as never)).resolves.toBeUndefined();
302-await vi.waitFor(() => {
303-expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
304-});
305-await vi.waitFor(() => {
306-expect(params.runtime.error).toHaveBeenCalledWith(
307-expect.stringContaining("discord inbound worker failed: Error: post-send failure"),
308-);
309-});
298+await flushQueueWork();
299+expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
300+expect(params.runtime.error).toHaveBeenCalledWith(
301+expect.stringContaining("discord inbound worker failed: Error: post-send failure"),
302+);
310303311304await expect(handler(duplicate as never, {} as never)).resolves.toBeUndefined();
312305await Promise.resolve();
@@ -322,9 +315,8 @@ describe("createDiscordMessageHandler queue behavior", () => {
322315const { handlerParams } = await queueTimedMessages();
323316324317await vi.advanceTimersByTimeAsync(60);
325-await vi.waitFor(() => {
326-expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
327-});
318+await flushQueueWork();
319+expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
328320329321const firstCtx = processDiscordMessageMock.mock.calls[0]?.[0] as
330322| { abortSignal?: AbortSignal }
@@ -365,9 +357,8 @@ describe("createDiscordMessageHandler queue behavior", () => {
365357});
366358367359await vi.advanceTimersByTimeAsync(60);
368-await vi.waitFor(() => {
369-expect(deliverDiscordReplyMock).toHaveBeenCalledTimes(1);
370-});
360+await flushQueueWork();
361+expect(deliverDiscordReplyMock).toHaveBeenCalledTimes(1);
371362372363expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
373364expect(handlerParams.runtime.error).toHaveBeenCalledWith(
@@ -377,9 +368,8 @@ describe("createDiscordMessageHandler queue behavior", () => {
377368deliverTimeoutReply.resolve();
378369await deliverTimeoutReply.promise;
379370380-await vi.waitFor(() => {
381-expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
382-});
371+await flushQueueWork();
372+expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
383373} finally {
384374vi.useRealTimers();
385375}
@@ -485,9 +475,8 @@ describe("createDiscordMessageHandler queue behavior", () => {
485475await expect(
486476handler(createMessageData("m-1") as never, {} as never),
487477).resolves.toBeUndefined();
488-await vi.waitFor(() => {
489-expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
490-});
478+await flushQueueWork();
479+expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
491480492481await vi.advanceTimersByTimeAsync(60);
493482await Promise.resolve();
@@ -580,9 +569,8 @@ describe("createDiscordMessageHandler queue behavior", () => {
580569handler(createMessageData("m-1") as never, {} as never),
581570).resolves.toBeUndefined();
582571583-await vi.waitFor(() => {
584-expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
585-});
572+await flushQueueWork();
573+expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
586574587575expect(capturedHeartbeat).toBe(true);
588576const busyCallsBefore = setStatus.mock.calls.filter(
@@ -599,9 +587,8 @@ describe("createDiscordMessageHandler queue behavior", () => {
599587runInFlight.resolve();
600588await runInFlight.promise;
601589602-await vi.waitFor(() => {
603-expect(clearIntervalSpy).toHaveBeenCalled();
604-});
590+await flushQueueWork();
591+expect(clearIntervalSpy).toHaveBeenCalled();
605592} finally {
606593setIntervalSpy.mockRestore();
607594clearIntervalSpy.mockRestore();
@@ -660,9 +647,8 @@ describe("createDiscordMessageHandler queue behavior", () => {
660647661648const handler = createDiscordMessageHandler(createDiscordHandlerParams());
662649await expect(handler(createMessageData("m-1") as never, {} as never)).resolves.toBeUndefined();
663-await vi.waitFor(() => {
664-expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
665-});
650+await flushQueueWork();
651+expect(processDiscordMessageMock).toHaveBeenCalledTimes(1);
666652667653await expect(handler(createMessageData("m-2") as never, {} as never)).resolves.toBeUndefined();
668654handler.deactivate();
@@ -705,18 +691,16 @@ describe("createDiscordMessageHandler queue behavior", () => {
705691await handler(createMessageData("m-2") as never, {} as never);
706692})();
707693708-await vi.waitFor(() => {
709-expect(preflightDiscordMessageMock).toHaveBeenCalledTimes(1);
710-});
694+await flushQueueWork();
695+expect(preflightDiscordMessageMock).toHaveBeenCalledTimes(1);
711696await Promise.resolve();
712697expect(preflightDiscordMessageMock).toHaveBeenCalledTimes(1);
713698714699firstPreflight.resolve();
715700await sequentialDispatch;
716701717-await vi.waitFor(() => {
718-expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
719-});
702+await flushQueueWork();
703+expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
720704expect(processedMessageIds).toEqual(["m-1", "m-2"]);
721705});
722706@@ -745,13 +729,8 @@ describe("createDiscordMessageHandler queue behavior", () => {
745729firstRun.resolve();
746730await firstRun.promise.catch(() => undefined);
747731748-await vi.waitFor(() => {
749-expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
750-});
751-await vi.waitFor(() => {
752-expect(setStatus).toHaveBeenCalledWith(
753-expect.objectContaining({ activeRuns: 0, busy: false }),
754-);
755-});
732+await flushQueueWork();
733+expect(processDiscordMessageMock).toHaveBeenCalledTimes(2);
734+expect(setStatus).toHaveBeenCalledWith(expect.objectContaining({ activeRuns: 0, busy: false }));
756735});
757736});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。