39948-vm/backend/tests/http-test-utils.ts
2026-07-02 13:13:36 +02:00

40 lines
1.0 KiB
TypeScript

import http from 'node:http';
import type { Express } from 'express';
export interface RunningTestServer {
baseUrl: string;
close: () => Promise<void>;
}
export function startTestServer(app: Express): Promise<RunningTestServer> {
return new Promise((resolve, reject) => {
const server = http.createServer(app);
server.once('error', reject);
server.listen(0, '127.0.0.1', () => {
server.off('error', reject);
const address = server.address();
if (typeof address !== 'object' || address === null) {
server.close();
reject(new Error('Test server did not expose a listening address.'));
return;
}
resolve({
baseUrl: `http://127.0.0.1:${address.port}`,
close: () =>
new Promise((closeResolve, closeReject) => {
server.close((error) => {
if (error) {
closeReject(error);
return;
}
closeResolve();
});
}),
});
});
});
}