

























@@ -186,6 +186,10 @@ function createPrompter(params: {
186186return { prompter, notes };
187187}
188188189+function mockCalls<T extends unknown[]>(fn: unknown): T[] {
190+return (fn as { mock: { calls: T[] } }).mock.calls;
191+}
192+189193function createPerplexityConfig(apiKey: string, enabled?: boolean): OpenClawConfig {
190194return {
191195tools: {
@@ -337,9 +341,10 @@ describe("setupSearch", () => {
337341expect(pluginWebSearchApiKey(result, entry.pluginId)).toBe(entry.key);
338342expect(result.plugins?.entries?.[entry.pluginId]?.enabled).toBe(true);
339343if (entry.textMessage) {
340-expect(prompter.text).toHaveBeenCalledWith(
341-expect.objectContaining({ message: entry.textMessage, sensitive: true }),
344+const textCall = mockCalls<[Record<string, unknown>]>(prompter.text).find(
345+([options]) => options.message === entry.textMessage,
342346);
347+expect(textCall?.[0].sensitive).toBe(true);
343348}
344349}
345350@@ -387,9 +392,7 @@ describe("setupSearch", () => {
387392expect(result.tools?.web?.search?.provider).toBe("brave");
388393expect(result.tools?.web?.search?.enabled).toBeUndefined();
389394const missingNote = notes.find((n) => n.message.includes("No Brave Search API key stored"));
390-expect(missingNote).toMatchObject({
391-message: expect.stringContaining("No Brave Search API key stored"),
392-});
395+expect(missingNote?.message).toContain("No Brave Search API key stored");
393396} finally {
394397if (original === undefined) {
395398delete process.env.BRAVE_API_KEY;
@@ -494,11 +497,10 @@ describe("setupSearch", () => {
494497textValue: "",
495498});
496499await setupSearch(cfg, runtime, prompter);
497-expect(prompter.text).toHaveBeenCalledWith(
498-expect.objectContaining({
499-message: "Moonshot / Kimi API key",
500-}),
500+const textCall = mockCalls<[Record<string, unknown>]>(prompter.text).find(
501+([options]) => options.message === "Moonshot / Kimi API key",
501502);
503+expect(textCall?.[0].message).toBe("Moonshot / Kimi API key");
502504});
503505504506it("quickstart skips key prompt when env var is available", async () => {
@@ -662,17 +664,17 @@ describe("setupSearch", () => {
662664const providers = listSearchProviderOptions();
663665const values = providers.map((e) => e.id);
664666expect(values).toEqual([...values].toSorted());
665-expect(values).toEqual(
666-expect.arrayContaining([
667- "brave",
668- "firecrawl",
669- "gemini",
670- "grok",
671- "kimi",
672- "minimax",
673- "perplexity",
674- "tavily",
675-]),
676-);
667+for (const providerId of [
668+"brave",
669+"firecrawl",
670+"gemini",
671+"grok",
672+"kimi",
673+"minimax",
674+"perplexity",
675+"tavily",
676+]) {
677+expect(values).toContain(providerId);
678+}
677679});
678680});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。