← Cloudflare Workers / workers / testing / miniflare / core
Události fetch
HTTP Requests
Při každém HTTP požadavku se Request objekt je odeslán do vašeho workeru, poté vygenerovaný Response se vrací.
Request objekt bude obsahovat
cf objekt.
Miniflare zaznamená metodu, cestu, stav a dobu, za kterou byla odpověď odeslána.
Pokud Worker při generování odpovědi vyvolá chybu, místo ní se vrátí chybová stránka obsahující stack trace.
Odesílání událostí
Při použití API dispatchFetch funkci lze použít k odeslání fetch
události do vašeho Workeru. To lze použít k testování odpovědí. dispatchFetch
má stejné API jako běžný fetch metoda: buď přijímá Request
objekt, nebo URL a volitelný RequestInit objekt:
import { Miniflare, Request } from "miniflare";
const mf = new Miniflare({
modules: true,
script: `
export default {
async fetch(request, env, ctx) {
const body = JSON.stringify({
url: event.request.url,
header: event.request.headers.get("X-Message"),
});
return new Response(body, {
headers: { "Content-Type": "application/json" },
});
})
}
`,
});
let res = await mf.dispatchFetch("http://localhost:8787/");
console.log(await res.json()); // { url: "http://localhost:8787/", header: null }
res = await mf.dispatchFetch("http://localhost:8787/1", {
headers: { "X-Message": "1" },
});
console.log(await res.json()); // { url: "http://localhost:8787/1", header: "1" }
res = await mf.dispatchFetch(
new Request("http://localhost:8787/2", {
headers: { "X-Message": "2" },
}),
);
console.log(await res.json()); // { url: "http://localhost:8787/2", header: "2" }Při odesílání událostí odpovídáte za přidání
CF-* hlavičky a
cf objekt.
Díky tomu můžete jejich hodnoty pro účely testování ovládat:
const res = await mf.dispatchFetch("http://localhost:8787", {
headers: {
"CF-IPCountry": "GB",
},
cf: {
country: "GB",
},
});Upstream
Miniflare zavolá každý fetch listener, dokud není vrácena odpověď. Pokud není
odpověď vrácena nebo dojde k vyvolání výjimky a passThroughOnException()
byla zavolána, odpověď se místo toho načte ze zadaného upstreamu:
import { Miniflare } from "miniflare";
const mf = new Miniflare({
script: `
addEventListener("fetch", (event) => {
event.passThroughOnException();
throw new Error();
});
`,
upstream: "https://miniflare.dev",
});
// If you don't use the same upstream URL when dispatching, Miniflare will
// rewrite it to match the upstream
const res = await mf.dispatchFetch("https://miniflare.dev/core/fetch");
console.log(await res.text()); // Source code of this page