




















@@ -6,13 +6,11 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
66import type { OpenClawConfig } from "../config/types.openclaw.js";
77import { MAX_TIMER_TIMEOUT_MS } from "../shared/number-coercion.js";
88import {
9-DEFAULT_MODEL_CATALOG_BROWSE_TIMEOUT_MS,
109loadModelCatalogForBrowse,
11-restoreModelCatalogBrowseTestDeps,
12-setModelCatalogBrowseTestDeps,
1310} from "./model-catalog-browse.js";
1411import type { ModelCatalogEntry } from "./model-catalog.types.js";
151213+const DEFAULT_MODEL_CATALOG_BROWSE_TIMEOUT_MS = 750;
1614const readOnlyCatalog: ModelCatalogEntry[] = [
1715{ id: "gpt-readonly", name: "GPT Readonly", provider: "openai" },
1816];
@@ -41,7 +39,6 @@ describe("loadModelCatalogForBrowse", () => {
4139vi.clearAllTimers();
4240vi.restoreAllMocks();
4341vi.useRealTimers();
44-restoreModelCatalogBrowseTestDeps();
4542});
46434744it("uses the read-only catalog for default browse views", async () => {
@@ -97,16 +94,8 @@ describe("loadModelCatalogForBrowse", () => {
9794});
98959996it("returns an empty catalog when read-only catalog loading times out with provider wildcards", async () => {
97+vi.useFakeTimers();
10098const onTimeout = vi.fn();
101-const timeoutHandle = { unref: vi.fn() } as unknown as NodeJS.Timeout;
102-const clearTimeout = vi.fn();
103-setModelCatalogBrowseTestDeps({
104-setTimeout: vi.fn((callback: () => void) => {
105-queueMicrotask(callback);
106-return timeoutHandle;
107-}) as unknown as typeof globalThis.setTimeout,
108-clearTimeout: clearTimeout as unknown as typeof globalThis.clearTimeout,
109-});
11099const loadCatalog = vi.fn(() => new Promise<ModelCatalogEntry[]>(() => {}));
111100112101const resultPromise = loadModelCatalogForBrowse({
@@ -116,21 +105,15 @@ describe("loadModelCatalogForBrowse", () => {
116105 onTimeout,
117106});
118107108+await vi.advanceTimersByTimeAsync(5);
119109await expect(resultPromise).resolves.toEqual([]);
120110expect(onTimeout).toHaveBeenCalledExactlyOnceWith(5);
121-expect(timeoutHandle["unref"]).toHaveBeenCalledOnce();
122-expect(clearTimeout).toHaveBeenCalledExactlyOnceWith(timeoutHandle);
123111});
124112125113it("uses the default timeout when timeoutMs is non-finite", async () => {
126114const onTimeout = vi.fn();
127-const timeoutHandle = { unref: vi.fn() } as unknown as NodeJS.Timeout;
128-const setTimeout = vi.fn(() => timeoutHandle);
129-const clearTimeout = vi.fn();
130-setModelCatalogBrowseTestDeps({
131-setTimeout: setTimeout as unknown as typeof globalThis.setTimeout,
132-clearTimeout: clearTimeout as unknown as typeof globalThis.clearTimeout,
133-});
115+const setTimeout = vi.spyOn(globalThis, "setTimeout");
116+const clearTimeout = vi.spyOn(globalThis, "clearTimeout");
134117const loadCatalog = vi.fn(async () => readOnlyCatalog);
135118136119const resultPromise = loadModelCatalogForBrowse({
@@ -145,18 +128,13 @@ describe("loadModelCatalogForBrowse", () => {
145128expect.any(Function),
146129DEFAULT_MODEL_CATALOG_BROWSE_TIMEOUT_MS,
147130);
148-expect(clearTimeout).toHaveBeenCalledExactlyOnceWith(timeoutHandle);
131+expect(clearTimeout).toHaveBeenCalledOnce();
149132expect(onTimeout).not.toHaveBeenCalled();
150133});
151134152135it("caps oversized browse timeouts before scheduling the fallback timer", async () => {
153-const timeoutHandle = { unref: vi.fn() } as unknown as NodeJS.Timeout;
154-const setTimeout = vi.fn(() => timeoutHandle);
155-const clearTimeout = vi.fn();
156-setModelCatalogBrowseTestDeps({
157-setTimeout: setTimeout as unknown as typeof globalThis.setTimeout,
158-clearTimeout: clearTimeout as unknown as typeof globalThis.clearTimeout,
159-});
136+const setTimeout = vi.spyOn(globalThis, "setTimeout");
137+const clearTimeout = vi.spyOn(globalThis, "clearTimeout");
160138const loadCatalog = vi.fn(async () => readOnlyCatalog);
161139162140const resultPromise = loadModelCatalogForBrowse({
@@ -167,6 +145,6 @@ describe("loadModelCatalogForBrowse", () => {
167145168146await expect(resultPromise).resolves.toBe(readOnlyCatalog);
169147expect(setTimeout).toHaveBeenCalledExactlyOnceWith(expect.any(Function), MAX_TIMER_TIMEOUT_MS);
170-expect(clearTimeout).toHaveBeenCalledExactlyOnceWith(timeoutHandle);
148+expect(clearTimeout).toHaveBeenCalledOnce();
171149});
172150});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。