跳转到内容
搜索文档

Web 标准

最后更新 查看 MarkdownAgent 设置

Mock 出向 fetch 请求

在使用 API 时,Miniflare 允许你使用 undiciMockAgent APIfetch() 调用替换自定义的 Response。这对于测试向其他服务发起 HTTP 请求的 Worker 很有用。要启用 fetch mock,请使用 createFetchMock() 函数创建一个 MockAgent,然后使用 fetchMock 选项设置它。

import { Miniflare, createFetchMock } from "miniflare";

// 创建 `MockAgent` 并将其连接到 `Miniflare` 实例
const fetchMock = createFetchMock();
const mf = new Miniflare({
	modules: true,
	script: `
  export default {
    async fetch(request, env, ctx) {
      const res = await fetch("https://example.com/thing");
      const text = await res.text();
      return new Response(\`response:\${text}\`);
    }
  }
  `,
	fetchMock,
});

// 当未找到匹配的 Mock 请求时抛出异常
// (参见 https://undici.nodejs.org/#/docs/api/MockAgent?id=mockagentdisablenetconnect)
fetchMock.disableNetConnect();

// Mock 对 https://example.com/thing 的请求
// (参见 https://undici.nodejs.org/#/docs/api/MockAgent?id=mockagentgetorigin)
const origin = fetchMock.get("https://example.com");
// (参见 https://undici.nodejs.org/#/docs/api/MockPool?id=mockpoolinterceptoptions)
origin
	.intercept({ method: "GET", path: "/thing" })
	.reply(200, "Mocked response!");

const res = await mf.dispatchFetch("http://localhost:8787/");
console.log(await res.text()); // "response:Mocked response!"

子请求 (Subrequests)

Miniflare 不支持限制子请求的数量。如果你从 Worker 发出大量子请求,请务必注意这一点。

这篇文档对您有帮助吗?