Skip to main content

metch

A Deno module to mock fetch().

import { mockFetch, unMockFetch } from "https://deno.land/x/metch/mod.ts";
import { assertEquals } from "https://deno.land/std@0.90.0/testing/asserts.ts";

Deno.test("mocks fetch() as expected", async () => {
  const request1 = new Request("https://example.com");
  const expectedResponse1 = new Response("<html> example.com </html>", {
    status: 200,
    headers: {
      "content-type": "text/html",
    },
  });

  const request2 = new Request("https://example.rest");
  const expectedResponse2 = new Response(
    JSON.stringify({ message: "example" }),
    {
      status: 200,
      headers: {
        "content-type": "text/html",
      },
    },
  );

  // Pass a request object and a response object which
  // will be used to respond to fetch().
  await mockFetch(request1, expectedResponse1.clone());

  // Call again to mock more requests.
  await mockFetch(request2, expectedResponse2.clone());

  const response1 = await fetch(request1);
  const response2 = await fetch(request2);

  assertEquals(response1.status, expectedResponse1.status);
  assertEquals(await response1.text(), await expectedResponse1.text());
  assertEquals(
    response1.headers.get("content-type"),
    expectedResponse1.headers.get("content-type"),
  );

  assertEquals(response2.status, expectedResponse2.status);
  assertEquals(await response2.text(), await expectedResponse2.text());
  assertEquals(
    response2.headers.get("content-type"),
    expectedResponse2.headers.get("content-type"),
  );

  // Restore original fetch().
  unMockFetch();
});