fetch-mock不模拟我的提取

Raf*_* K. 6 fetch node.js fetch-mock

这是代码片段:

var fetch = require("node-fetch");
var fetchMock = require("fetch-mock");

function setupMockBlockChainExplorer() {
  fetchMock.mock("https://cardanoexplorer.com/api/addresses/summary/DdzFFzCqrhsmagp4fDZpcY9UaBJk4Z8GaDfxqMCSwxPs3PnVoXmJWUZcgAxw3diCHVYauontEfk7YGeAu2LvAwq3aG2XQ8Mtsz7Vc8LA", {
    "status" : 200,
    "body" : "override"
  });
}

async function makeRequest(url, method = "get", body = null, headers = null) {
  const res = await fetch(url, {
    method: method,
    headers: headers,
    body: body,
  });

  return res.json()
};

setupMockBlockChainExplorer();

var req = makeRequest("https://cardanoexplorer.com/api/addresses/summary/DdzFFzCqrhsmagp4fDZpcY9UaBJk4Z8GaDfxqMCSwxPs3PnVoXmJWUZcgAxw3diCHVYauontEfk7YGeAu2LvAwq3aG2XQ8Mtsz7Vc8LA");

// I would expect it to print "override" but it prints the http response from the real request instead
req.then(console.log)
Run Code Online (Sandbox Code Playgroud)

因此,正如您在上面的代码中看到的那样,我试图覆盖HTTP请求,但是我仍然使用fetch来访问真实的URL。我已经阅读了fetch-mock文档(http://www.wheresrhys.co.uk/fetch-mock/installation.html),并且还尝试过这样的配置:

fetchMock.config = Object.assign(fetchMock.config, {
    "fetch": fetch
});
Run Code Online (Sandbox Code Playgroud)

但没有运气。我究竟做错了什么?

ala*_*yor 5

我认为问题是您没有使用的“全局”版本fetch

尝试使用isomorphic-fetch代替node-fetch

您可以在此处看到更多说明。

注意这句话:

使用import 'isomorphic-fetch',不import fetch from 'isomorphic-fetch'

  • 是的,问题在于代码段开头的“ var fetch = require(“ node-fetch”))”。它应该只是“ require(” node-fetch“)” (2认同)
  • @lfender6445 现在已修复。谢谢! (2认同)