52 lines · 2.1 KB · TypeScript
RawDownload
import { describe, it, expect } from "vitest";import { buildExecutorModule } from "./module-template"; describe("buildExecutorModule", () => {  it("produces a valid ES module with WorkerEntrypoint import", () => {    const module = buildExecutorModule("return 42;", 5000);    expect(module).toContain('import { WorkerEntrypoint } from "cloudflare:workers"');    expect(module).toContain("class CodeExecutor extends WorkerEntrypoint");  });   it("embeds the recovered body in an async wrapper inside Promise.race", () => {    const module = buildExecutorModule("return 42;", 5000);    expect(module).toContain("(async () => {");    expect(module).toContain("return 42;");    expect(module).toContain("})(),");    expect(module).toContain("Promise.race");  });   it("includes the timeout value", () => {    const module = buildExecutorModule("return 42;", 3000);    expect(module).toContain("3000");    expect(module).toContain("Execution timed out after 3000ms");  });   it("includes the tools proxy setup", () => {    const module = buildExecutorModule("return 42;", 5000);    expect(module).toContain("__makeToolsProxy");    expect(module).toContain("__dispatcher.call");    expect(module).toContain("const tools = __makeToolsProxy()");  });   it("captures console output", () => {    const module = buildExecutorModule("return 42;", 5000);    expect(module).toContain("const __logs = []");    expect(module).toContain("console.log =");    expect(module).toContain("console.warn =");    expect(module).toContain("console.error =");  });   it("returns result and logs on success", () => {    const module = buildExecutorModule("return 42;", 5000);    expect(module).toContain("return { result, logs: __logs }");  });   it("catches errors and returns them", () => {    const module = buildExecutorModule("return 42;", 5000);    expect(module).toContain("catch (err)");    expect(module).toContain("const __serializeThrownError = (err) =>");    expect(module).toContain("if (!data.ok)");    expect(module).toContain("error: __serializeThrownError(err)");  });});