Files
nage/server/testSetup.ts
T
2026-09-27 14:09:50 +02:00

46 lines
1.1 KiB
TypeScript

import { startServer } from "./server.ts";
export const hostname = "0.0.0.0";
export const port = 8042;
export function setup(
fn: (ctx: Deno.TestContext) => Promise<void>,
handler: Deno.ServeHandler,
): (ctx: Deno.TestContext) => Promise<void> {
return async (ctx) => {
const shutdown = startServer(handler, hostname, port);
try {
await fn(ctx);
} finally {
await shutdown();
}
};
}
export function connect(url: string): Promise<[WebSocket, string[]]> {
return new Promise((resolve, reject) => {
const messages: string[] = [];
const socket = new WebSocket(url);
socket.onopen = () => resolve([socket, messages]);
socket.onerror = (error) => reject(error);
socket.onmessage = ({ data }) => {
messages.push(data);
};
});
}
export function close(socket: WebSocket): Promise<void> {
return new Promise((resolve) => {
if (socket.readyState === WebSocket.CLOSED) {
return resolve();
}
socket.onclose = () => resolve();
socket.close();
});
}
export function flush(): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, 0));
}