首页 > 解决方案 > 在 Deno 中对 global.fetch 进行 Stubbing / Spy

问题描述

我刚刚进入 Deno,我有点不确定的一件事是如何为全局 fetch 函数存根或创建一个间谍?

一种解决方案是简单地将 fetch 包装在一个函数中,该函数本身可以被存根或监视,但这似乎是不必要的抽象。

任何帮助将非常感激。

标签: unit-testingtestingdeno

解决方案


使用 denock,您可以模拟 fetch 调用的返回对象。也许不是您想要的,但现在您无需真正调用服务器即可进行测试。

https://deno.land/x/denock@0.2.0


import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
import { denock } from "https://deno.land/x/denock/mod.ts";

// function to test
async function fetchFromServer() {
  const urlObject = new URL("https://jsonplaceholder.typicode.com/todos");

  const response = await fetch(urlObject, {
    method: "POST",
    headers: new Headers({
      "content-type": "application/json",
    }),
    body: JSON.stringify({
      userId: 2,
      id: 23024,
      title: "delectus aut autem",
      completed: false,
    }),
  });

  return await response.json();
}

// mock return
denock({
  method: "POST",
  protocol: "https",
  host: "jsonplaceholder.typicode.com",
  headers: [
    {
      header: "content-type",
      value: "application/json",
    },
  ],
  path: "/todos",
  requestBody: {
    userId: 2,
    id: 23024,
    title: "delectus aut autem",
    completed: false,
  },
  replyStatus: 201,
  responseBody: { example: "My mocked response" },
});


// test
Deno.test("fetch", async () => {
  const actual = await fetchFromServer();
  assertEquals({ example: "My mocked response" }, actual);
});





推荐阅读