我试图创建响应对象的嘲笑与jest,我似乎不能得到正确的语法。
你好,
jest.mock('node-fetch')
const fetch = require('node-fetch')
const { Response, Headers } = jest.requireActual('node-fetch')
// Example adapted from https://fetch.spec.whatwg.org/#example-headers-class
const meta = {
'Content-Type': 'application/json',
'Accept': '*/*',
'Breaking-Bad': '<3'
}
// You can in fact use any iterable objects, like a Map or even another Headers
const headers = new Headers(meta)
const copyOfHeaders = new Headers(headers)
const ResponseInit = {
status: 200,
statusText: 'fail',
headers: headers
}
字符串
通过一个基本的测试
test('Basic Test', async () => {
const token = ''
const getDocList = new Response(JSON.stringify(downloadDocumentData), ResponseInit)
fetch.mockResolvedValueOnce(Promise.resolve(getDocList))
await module.doSomething('mock', token)
.then( async(res) => {
await expect(res.data).toEqual(Object)
})
}, 5000)
型
我得到一个错误,
FetchError {
message:
'invalid json response body at reason: Unexpected token H in JSON at position 2',
type: 'invalid-json' }
型
我如何初始化一个有效的json响应,我已经尝试了很多不同的东西。
在https://jestjs.io/docs/en/bypassing-module-mocks的文章之后,我想返回并测试json。
1条答案
按热度按时间55ooxyrt1#
我们应该使用jest.mock(moduleName,factory,options)来模拟
node-fetch
模块和fetch
函数。为了构造
fetch
函数的响应对象,需要使用node-fetch
模块提供的Response
类,因此使用jest.requireActual(moduleName)来获取原始的、未模拟的node-fetch
模块和Response
类。当然,我们可以任意构造响应对象,但是
Response
类的示例确实接近于真实的响应。headers
对象也是如此。下面是一个工作demo:
index.js
:字符串
index.spec.js
:型
单元测试结果:
型
源代码:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/58648691