branch: main
durable.spec.ts
1827 bytesRaw
import {describe, test, expect} from "vitest";
import { mf, mfUrl } from "./mf";
import {MessageEvent} from "miniflare";
describe("durable", () => {
test("put-raw", async () => {
const resp = await mf.dispatchFetch(`${mfUrl}durable/put-raw`);
expect(await resp.text()).toBe("ok");
});
test("websocket-to-durable", async () => {
const resp = await mf.dispatchFetch(`${mfUrl}durable/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++;
expect(event.data).toMatch(/^10|20|30$/);
});
let calledClose = false;
socket.addEventListener("close", function (event: CloseEvent) {
calledClose = true;
});
socket.send("hi, can you ++?");
await new Promise((resolve) => setTimeout(resolve, 500));
expect(cnt).toBe(1);
socket.send("hi again, more ++?");
await new Promise((resolve) => setTimeout(resolve, 500));
expect(cnt).toBe(2);
socket.close();
// TODO: Investigate why this is not passing
// await new Promise(resolve => setTimeout(resolve, 1000));
// expect(calledClose).toBe(true);
});
test("get-by-name", async () => {
const resp = await mf.dispatchFetch(`${mfUrl}durable/get-by-name`);
expect(resp.status).toBe(200);
const text = await resp.text();
expect(text).toBe("Hello from my-durable-object!");
});
test("get-by-name-with-location-hint", async () => {
const resp = await mf.dispatchFetch(`${mfUrl}durable/get-by-name-with-location-hint`);
expect(resp.status).toBe(200);
const text = await resp.text();
expect(text).toBe("Hello from my-durable-object!");
});
});