



























@@ -36,6 +36,13 @@ const TEST_ACCOUNT = {
36363737const TEST_CONFIG = {} as OpenClawConfig;
383839+async function settleLifecycleWork(): Promise<void> {
40+for (let i = 0; i < 6; i += 1) {
41+await Promise.resolve();
42+await new Promise((resolve) => setImmediate(resolve));
43+}
44+}
45+3946async function startLifecycleMonitor(
4047options: {
4148useWebhook?: boolean;
@@ -70,7 +77,8 @@ describe("monitorZaloProvider lifecycle", () => {
7077settled = true;
7178});
727973-await vi.waitFor(() => expect(getUpdatesMock).toHaveBeenCalledTimes(1));
80+await settleLifecycleWork();
81+expect(getUpdatesMock).toHaveBeenCalledTimes(1);
74827583expect(getWebhookInfoMock).toHaveBeenCalledTimes(1);
7684expect(deleteWebhookMock).not.toHaveBeenCalled();
@@ -94,7 +102,8 @@ describe("monitorZaloProvider lifecycle", () => {
9410295103const { abort, runtime, run } = await startLifecycleMonitor();
9610497-await vi.waitFor(() => expect(getUpdatesMock).toHaveBeenCalledTimes(1));
105+await settleLifecycleWork();
106+expect(getUpdatesMock).toHaveBeenCalledTimes(1);
9810799108expect(getWebhookInfoMock).toHaveBeenCalledTimes(1);
100109expect(deleteWebhookMock).toHaveBeenCalledTimes(1);
@@ -112,7 +121,8 @@ describe("monitorZaloProvider lifecycle", () => {
112121113122const { abort, runtime, run } = await startLifecycleMonitor();
114123115-await vi.waitFor(() => expect(getUpdatesMock).toHaveBeenCalledTimes(1));
124+await settleLifecycleWork();
125+expect(getUpdatesMock).toHaveBeenCalledTimes(1);
116126117127expect(getWebhookInfoMock).toHaveBeenCalledTimes(1);
118128expect(deleteWebhookMock).not.toHaveBeenCalled();
@@ -129,10 +139,24 @@ describe("monitorZaloProvider lifecycle", () => {
129139const registry = createEmptyPluginRegistry();
130140setActivePluginRegistry(registry);
131141142+let resolveSetWebhookCalled: (() => void) | undefined;
143+const setWebhookCalled = new Promise<void>((resolve) => {
144+resolveSetWebhookCalled = resolve;
145+});
146+setWebhookMock.mockImplementationOnce(async () => {
147+resolveSetWebhookCalled?.();
148+return { ok: true, result: { url: "" } };
149+});
150+151+let resolveDeleteWebhookCalled: (() => void) | undefined;
152+const deleteWebhookCalled = new Promise<void>((resolve) => {
153+resolveDeleteWebhookCalled = resolve;
154+});
132155let resolveDeleteWebhook: (() => void) | undefined;
133156deleteWebhookMock.mockImplementationOnce(
134157() =>
135158new Promise((resolve) => {
159+resolveDeleteWebhookCalled?.();
136160resolveDeleteWebhook = () => resolve({ ok: true, result: { url: "" } });
137161}),
138162);
@@ -147,12 +171,15 @@ describe("monitorZaloProvider lifecycle", () => {
147171settled = true;
148172});
149173150-await vi.waitFor(() => expect(setWebhookMock).toHaveBeenCalledTimes(1), { timeout: 5_000 });
174+await setWebhookCalled;
175+await settleLifecycleWork();
176+expect(setWebhookMock).toHaveBeenCalledTimes(1);
151177expect(registry.httpRoutes).toHaveLength(2);
152178153179abort.abort();
154180155-await vi.waitFor(() => expect(deleteWebhookMock).toHaveBeenCalledTimes(1), { timeout: 5000 });
181+await deleteWebhookCalled;
182+expect(deleteWebhookMock).toHaveBeenCalledTimes(1);
156183expect(deleteWebhookMock).toHaveBeenCalledWith("test-token", undefined, 5000);
157184expect(settled).toBe(false);
158185expect(registry.httpRoutes).toHaveLength(2);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。