我如何通过Jest模拟Node.js中的fetch函数?
api.js
'use strict'
var fetch = require('node-fetch');
const makeRequest = async () => {
const res = await fetch("http://httpbin.org/get");
const resJson = await res.json();
return resJson;
};
module.exports = makeRequest;
test.js
describe('fetch-mock test', () => {
it('check fetch mock test', async () => {
var makeRequest = require('../mock/makeRequest');
// I want to mock here
global.fetch = jest.fn().mockImplementationOnce(() => {
return new Promise((resolve, reject) => {
resolve({
ok: true,
status,
json: () => {
return returnBody ? returnBody : {};
},
});
});
});
makeRequest().then(function (data) {
console.log('got data', data);
}).catch((e) => {
console.log(e.message)
});
});
});
我尝试使用jest-fetch-mock、nock和jest.mock,但是失败了。
谢谢。
3条答案
按热度按时间m1m5dgzv1#
ddrv8njm2#
我发现在Jest中模拟ECMAScript模块最简单的方法是使用
jest.unstable_mockModule
。示例:
jucafojl3#
您可以使用
jest.mock
模拟node-fetch
,然后在测试集中模拟实际响应