使用Deno对全局的fetch进行桩测试/间谍测试

5

我刚开始接触Deno,有一件事让我有点不确定,那就是如何为全局fetch函数制造一个存根或间谍?

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

任何帮助都将不胜感激。

1个回答

3

使用 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);
});





网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接