


















@@ -3,6 +3,10 @@ import { withEnv, withEnvAsync, withFetchPreconnect } from "openclaw/plugin-sdk/
33import { afterEach, describe, expect, it, vi } from "vitest";
44import { __testing, createGeminiWebSearchProvider } from "./src/gemini-web-search-provider.js";
556+type TestModelProviderConfig = NonNullable<
7+NonNullable<OpenClawConfig["models"]>["providers"]
8+>[string];
9+610function installGeminiFetch() {
711const mockFetch = vi.fn((_input?: unknown, _init?: unknown) =>
812Promise.resolve({
@@ -24,6 +28,21 @@ function installGeminiFetch() {
2428return mockFetch;
2529}
263031+function createGoogleModelProviderConfig(
32+overrides: Partial<TestModelProviderConfig>,
33+): TestModelProviderConfig {
34+return {
35+baseUrl: "https://generativelanguage.googleapis.com/v1beta/",
36+models: [],
37+ ...overrides,
38+};
39+}
40+41+function getFetchHeaders(mockFetch: ReturnType<typeof installGeminiFetch>): Record<string, string> {
42+const init = mockFetch.mock.calls[0]?.[1] as { headers?: Record<string, string> } | undefined;
43+return init?.headers ?? {};
44+}
45+2746afterEach(() => {
2847vi.useRealTimers();
2948vi.restoreAllMocks();
@@ -118,9 +137,9 @@ describe("google web search provider", () => {
118137config: {
119138models: {
120139providers: {
121-google: {
140+google: createGoogleModelProviderConfig({
122141apiKey: "AIza-provider-test",
123-},
142+}),
124143},
125144},
126145},
@@ -129,9 +148,7 @@ describe("google web search provider", () => {
129148130149await tool?.execute({ query: "OpenClaw provider key fallback" });
131150132-expect(
133-(mockFetch.mock.calls[0]?.[1]?.headers as Record<string, string>)["x-goog-api-key"],
134-).toBe("AIza-provider-test");
151+expect(getFetchHeaders(mockFetch)["x-goog-api-key"]).toBe("AIza-provider-test");
135152});
136153});
137154@@ -154,9 +171,9 @@ describe("google web search provider", () => {
154171},
155172models: {
156173providers: {
157-google: {
174+google: createGoogleModelProviderConfig({
158175apiKey: "AIza-provider-test",
159-},
176+}),
160177},
161178},
162179},
@@ -165,9 +182,7 @@ describe("google web search provider", () => {
165182166183await tool?.execute({ query: "OpenClaw plugin key precedence" });
167184168-expect(
169-(mockFetch.mock.calls[0]?.[1]?.headers as Record<string, string>)["x-goog-api-key"],
170-).toBe("AIza-plugin-test");
185+expect(getFetchHeaders(mockFetch)["x-goog-api-key"]).toBe("AIza-plugin-test");
171186});
172187});
173188@@ -178,10 +193,10 @@ describe("google web search provider", () => {
178193config: {
179194models: {
180195providers: {
181-google: {
196+google: createGoogleModelProviderConfig({
182197apiKey: "AIza-provider-test",
183198baseUrl: "https://generativelanguage.googleapis.com/provider/v1beta/",
184-},
199+}),
185200},
186201},
187202},
@@ -214,9 +229,9 @@ describe("google web search provider", () => {
214229},
215230models: {
216231providers: {
217-google: {
232+google: createGoogleModelProviderConfig({
218233baseUrl: "https://generativelanguage.googleapis.com/provider/v1beta/",
219-},
234+}),
220235},
221236},
222237},
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。