INTEGRITY Документация

Веб-стандарты

Подмена исходящих fetch Запросы

При использовании API Miniflare позволяет подставлять собственные Responses для fetch() вызовов с использованием undici: MockAgent API. Это полезно для тестирования Workers, которые отправляют HTTP запросы к другим сервисам. Чтобы включить fetch для мокирования создайте MockAgent с использованием createFetchMock() функция, затем задайте это с помощью fetchMock параметр.

import { Miniflare, createFetchMock } from "miniflare";

// Create `MockAgent` and connect it to the `Miniflare` instance
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,
});

// Throw when no matching mocked request is found
// (see https://undici.nodejs.org/#/docs/api/MockAgent?id=mockagentdisablenetconnect)
fetchMock.disableNetConnect();

// Mock request to https://example.com/thing
// (see https://undici.nodejs.org/#/docs/api/MockAgent?id=mockagentgetorigin)
const origin = fetchMock.get("https://example.com");
// (see 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!"

Подзапросы

Miniflare не поддерживает ограничение объёма подзапросы. Учитывайте это, если ваш Worker выполняет большое количество подзапросов.