deno.land / x / fresh@1.1.1 / tests / plugin_test.ts

plugin_test.ts
نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import { ServerContext, Status } from "../server.ts";import { assert, assertEquals, assertStringIncludes, delay, puppeteer, TextLineStream,} from "./deps.ts";import manifest from "./fixture_plugin/fresh.gen.ts";import options from "./fixture_plugin/options.ts";
const ctx = await ServerContext.fromManifest(manifest, options);const handler = ctx.handler();const router = (req: Request) => { return handler(req, { localAddr: { transport: "tcp", hostname: "127.0.0.1", port: 80, }, remoteAddr: { transport: "tcp", hostname: "127.0.0.1", port: 80, }, });};
Deno.test("/static page prerender", async () => { const resp = await router(new Request("https://fresh.deno.dev/static")); assert(resp); assertEquals(resp.status, Status.OK); const body = await resp.text(); assertStringIncludes(body, '<style id="abc">body { color: red; }</style>'); assert(!body.includes(`>[[],[]]</script>`)); assert(!body.includes(`import`));});
Deno.test("/with-island prerender", async () => { const resp = await router(new Request("https://fresh.deno.dev/with-island")); assert(resp); assertEquals(resp.status, Status.OK); const body = await resp.text(); assertStringIncludes( body, '<style id="abc">body { color: red; } h1 { color: blue; }</style>', ); assertStringIncludes(body, `>[[{}],["JS injected!"]]</script>`); assertStringIncludes(body, `/plugin-js-inject-main.js"`);});
Deno.test({ name: "/with-island hydration", async fn(t) { // Preparation const serverProcess = Deno.run({ cmd: ["deno", "run", "-A", "./tests/fixture_plugin/main.ts"], stdout: "piped", stderr: "inherit", });
const decoder = new TextDecoderStream(); const lines = serverProcess.stdout.readable .pipeThrough(decoder) .pipeThrough(new TextLineStream());
let started = false; for await (const line of lines) { if (line.includes("Listening on http://")) { started = true; break; } } if (!started) { throw new Error("Server didn't start up"); }
await delay(100);
const browser = await puppeteer.launch({ args: ["--no-sandbox"] }); const page = await browser.newPage();
await page.goto("http://localhost:8000/with-island", { waitUntil: "networkidle2", });
await t.step("island is revived", async () => { await page.waitForSelector("#csr"); });
await t.step("title was updated", async () => { const title = await page.title(); assertEquals(title, "JS injected!"); });
await browser.close();
await lines.cancel(); serverProcess.kill("SIGTERM"); serverProcess.close(); }, sanitizeOps: false, sanitizeResources: false,});
fresh

Version Info

Tagged at
a year ago