Files
bun.sh/test/js/third_party/@fastify/websocket/fastity-test-websocket.test.js

56 lines
1.5 KiB
JavaScript

import websocket from "@fastify/websocket";
import { expect, test } from "bun:test";
import Fastify from "fastify";
test("websocket", async () => {
const fastify = Fastify({
logger: false,
});
try {
// Websocket
fastify.register(websocket, {
options: {
server: fastify.server,
},
});
// Health check routes
fastify.get("/health", async () => ({ status: "ok" }));
fastify.get("/healthz", async () => ({ status: "ok" }));
const { promise, resolve } = Promise.withResolvers();
let serverMessage = "";
async function start() {
try {
fastify.register(instance => {
instance.get("/websocket", { websocket: true }, (connection, request) => {
connection.on("message", message => {
serverMessage = message?.toString();
connection.send("Hello, client!");
});
});
});
const address = await fastify.listen({ port: 0, host: "0.0.0.0" });
console.info(`API listening on ${address}`);
const ws = new WebSocket(`${address}/websocket`);
ws.onopen = () => {
ws.send("Hello, server!");
};
ws.onmessage = event => {
resolve(event.data);
};
} catch (err) {
console.error(err);
process.exit(1);
}
}
start();
const message = await promise;
expect(message).toBe("Hello, client!");
expect(serverMessage).toBe("Hello, server!");
} finally {
fastify.close();
}
});