branch: main
websocket.spec.ts
912 bytesRaw
import { describe, expect, test } from "vitest";
import { MessageEvent } from "miniflare";
import { mf, mfUrl } from "./mf";

describe("websocket", () => {
  test("to echo", async () => {
    const resp = await mf.dispatchFetch(`${mfUrl}websocket`, {
      headers: {
        upgrade: "websocket",
      },
    });
    expect(resp.webSocket).not.toBeNull();

    const socket = resp.webSocket!;
    socket.accept();

    let cnt = 0;
    socket.addEventListener("message", function (_event: MessageEvent) {
      cnt++;
    });
    let calledClose = false;
    socket.addEventListener("close", function (_event: CloseEvent) {
      calledClose = true;
    });

    socket.send("Hello, world!");

    await new Promise((resolve) => setTimeout(resolve, 500));

    expect(cnt).toBe(1);
    socket.close();

    await new Promise(resolve => setTimeout(resolve, 1000));
    expect(calledClose).toBe(true);
  });
});