Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用fetch mock模拟节点获取_Javascript_Node.js_Sinon Chai_Fetch Mock - Fatal编程技术网

Javascript 无法使用fetch mock模拟节点获取

Javascript 无法使用fetch mock模拟节点获取,javascript,node.js,sinon-chai,fetch-mock,Javascript,Node.js,Sinon Chai,Fetch Mock,我正在尝试对一个简单函数进行单元测试,该函数发送一个get请求,接收一个响应,然后返回一个带有成功或失败消息的promise对象。功能如下: module.exports.hello = async (event, context) => { return new Promise((resolve, reject) => { fetch("https://httpstat.us/429", { headers: { 'Content-Type': 'application

我正在尝试对一个简单函数进行单元测试,该函数发送一个get请求,接收一个响应,然后返回一个带有成功或失败消息的promise对象。功能如下:

module.exports.hello = async (event, context) => {
  return new Promise((resolve, reject) => {
    fetch("https://httpstat.us/429", { headers: { 'Content-Type': 'application/json' } }).then(response => {
      console.log(response);
      if (response.status == 200) {
        return response;
      } else {
        throw Error(response.status + ": " + response.statusText);
      }
    }).then(tokenData => {
      resolve({ status: 200, body: JSON.stringify({ statusText: 'Success' }) });
    }).catch(error => {
      reject(error.message);
    });
  });
};
在单元测试时,我使用fetchmock来模拟对api的调用,并有一个自定义响应。代码如下:

it('hello returns failure message', (done) => {
    fetchMock.get('*',  {
        status: 429,
        statusText: "Too Many Nothings",
        headers: { 'Content-type': 'application/json' }
     });

    edx.hello(null, null).catch(error => {
        expect(error).to.equal('429: Too Many Requests');
    }).then(() => {
        done();
    }).catch(error => {
        done(error);
    });
});

但这段代码并不是在模拟fetch请求,因为当我打印响应文本时,它是API作为响应发送的“太多请求”,而不是模拟的“太多虚无”。我对NodeJS是新手。请告诉我我做错了什么。

如果您使用
节点获取
包,它在node.js的全局范围内不可用。为了使
fetch mock
工作,您必须将fetch分配给
global
对象(例如,通过
import“node fetch”;
而不是
import fetch from“node fetch”;
),或者将fetch注入到您的测试方法中

发件人:

全局或非全局

fetch可由您的代码全局或本地使用。重要的是 确定哪一个应用于您的代码库,因为它将影响您的工作方式 使用fetchmock

全局提取

在以下场景中,fetch将是全局的

  • 在浏览器中使用本机获取(或多边形填充)时
  • 在node.js进程中将node fetch分配给global时(有时在同构代码库中使用的模式)
默认情况下,fetch mock假设fetch是全局的,因此不需要更多的设置 一旦您需要获取模拟,则需要。非全局获取库

在以下场景中,fetch将不是全局的

  • 在node.js中使用节点获取而不分配给全局
  • 在浏览器中使用fetch ponyfill
  • 使用在内部使用fetch-ponyfill的库
  • 某些构建设置会导致非全局获取,尽管情况并非总是如此
方法返回一个函数,该函数可用作插入 取回的替换。将其传递到您选择的模拟库中。 sandbox()返回的函数具有所有的fetch mock方法 暴露在上面,例如

const fetchMock = require('fetch-mock'); const myMock =
fetchMock.sandbox().mock('/home', 200); // pass myMock in to your
application code, instead of fetch, run it, then...
expect(myMock.called('/home')).to.be.true;

如果使用
node fetch
package,则它在node.js的全局范围内不可用。为了使
fetch mock
工作,您必须将fetch分配给
global
对象(例如,通过
import“node fetch”;
而不是
import fetch from“node fetch”;
),或者将fetch注入到您的测试方法中

发件人:

全局或非全局

fetch可由您的代码全局或本地使用。重要的是 确定哪一个应用于您的代码库,因为它将影响您的工作方式 使用fetchmock

全局提取

在以下场景中,fetch将是全局的

  • 在浏览器中使用本机获取(或多边形填充)时
  • 在node.js进程中将node fetch分配给global时(有时在同构代码库中使用的模式)
默认情况下,fetch mock假设fetch是全局的,因此不需要更多的设置 一旦您需要获取模拟,则需要。非全局获取库

在以下场景中,fetch将不是全局的

  • 在node.js中使用节点获取而不分配给全局
  • 在浏览器中使用fetch ponyfill
  • 使用在内部使用fetch-ponyfill的库
  • 某些构建设置会导致非全局获取,尽管情况并非总是如此
方法返回一个函数,该函数可用作插入 取回的替换。将其传递到您选择的模拟库中。 sandbox()返回的函数具有所有的fetch mock方法 暴露在上面,例如

const fetchMock = require('fetch-mock'); const myMock =
fetchMock.sandbox().mock('/home', 200); // pass myMock in to your
application code, instead of fetch, run it, then...
expect(myMock.called('/home')).to.be.true;