




















@@ -293,6 +293,64 @@ describe("brave web search provider", () => {
293293expect(requestUrl.pathname).toBe("/proxy/res/v1/llm/context");
294294});
295295296+it("reports malformed Brave web search JSON as a provider error", async () => {
297+vi.stubEnv("BRAVE_API_KEY", "");
298+const mockFetch = vi.fn(async (_input?: unknown, _init?: unknown) => {
299+return {
300+ok: true,
301+json: async () => {
302+throw new SyntaxError("Unexpected token");
303+},
304+} as Response;
305+});
306+global.fetch = mockFetch as typeof global.fetch;
307+308+const provider = createBraveWebSearchProvider();
309+const tool = provider.createTool({
310+config: {},
311+searchConfig: {
312+apiKey: "brave-test-key",
313+brave: { mode: "web" },
314+},
315+});
316+if (!tool) {
317+throw new Error("Expected tool definition");
318+}
319+320+await expect(tool.execute({ query: "latest ai news" })).rejects.toThrow(
321+"Brave Search API error: malformed JSON response",
322+);
323+});
324+325+it("reports malformed Brave llm-context JSON as a provider error", async () => {
326+vi.stubEnv("BRAVE_API_KEY", "");
327+const mockFetch = vi.fn(async (_input?: unknown, _init?: unknown) => {
328+return {
329+ok: true,
330+json: async () => {
331+throw new SyntaxError("Unexpected token");
332+},
333+} as Response;
334+});
335+global.fetch = mockFetch as typeof global.fetch;
336+337+const provider = createBraveWebSearchProvider();
338+const tool = provider.createTool({
339+config: {},
340+searchConfig: {
341+apiKey: "brave-test-key",
342+brave: { mode: "llm-context" },
343+},
344+});
345+if (!tool) {
346+throw new Error("Expected tool definition");
347+}
348+349+await expect(tool.execute({ query: "latest ai news" })).rejects.toThrow(
350+"Brave LLM Context API error: malformed JSON response",
351+);
352+});
353+296354it("keeps Brave cache entries isolated by baseUrl", async () => {
297355vi.stubEnv("BRAVE_API_KEY", "");
298356const mockFetch = vi.fn(async (_input?: unknown, _init?: unknown) => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。