Files
huskies/frontend/src/setupTests.ts
T

46 lines
1.7 KiB
TypeScript
Raw Normal View History

import "@testing-library/jest-dom";
import { beforeEach, vi } from "vitest";
// Default WebSocket stub: every `new WebSocket(...)` immediately fires
// `onerror` + `onclose` on the next microtask. Without this, `rpcCall` from
// `./api/rpc` (added by 770's HTTP→read-RPC migration) opens a real jsdom
// WebSocket that hangs ~9s before firing its connection-failure error,
// making any test that mounts a component calling `listAgents()` time out.
// Tests that need real WS responses should override per-test with
// `vi.stubGlobal("WebSocket", ...)`.
class FailingWebSocket {
onopen: ((ev: Event) => void) | null = null;
onmessage: ((ev: MessageEvent) => void) | null = null;
onerror: ((ev: Event) => void) | null = null;
onclose: ((ev: CloseEvent) => void) | null = null;
readyState = 0;
constructor(_url: string) {
queueMicrotask(() => {
this.readyState = 3;
this.onerror?.(new Event("error"));
this.onclose?.(new CloseEvent("close"));
});
}
send(_data: string) {}
close() {}
}
vi.stubGlobal("WebSocket", FailingWebSocket);
// Provide a default fetch mock so components that call API endpoints on mount
// don't throw URL-parse errors in the jsdom test environment. Tests that need
// specific responses should mock the relevant `api.*` method as usual.
beforeEach(() => {
vi.stubGlobal(
"fetch",
vi.fn((input: string | URL | Request) => {
const url = typeof input === "string" ? input : input.toString();
// Endpoints that return arrays need [] not {} to avoid "not iterable" errors.
2026-04-28 15:31:29 +00:00
const arrayEndpoints = ["/agents/config"];
const body = arrayEndpoints.some((ep) => url.endsWith(ep))
? JSON.stringify([])
: JSON.stringify({});
return Promise.resolve(new Response(body, { status: 200 }));
}),
);
});