我正在尝试用jest来模拟我的azure函数的node-fetch。在测试中,我有以下内容:
index.test.ts
jest.mock("node-fetch");
import fetch from "node-fetch";
const {Response} = jest.requireActual("node-fetch");
// Setup code here...
const expectedResult: User = {
user_id: "1",
email: "testEmail@email.com",
name: "testUser",
nickname: "test",
picture: "pic",
app_metadata: {
email: "testEmail@email.com"
}
};
(fetch as jest.MockedFunction<typeof fetch>).mockReturnValue(new Response(JSON.stringify(expectedResult)));
当我调用它时,我会执行以下操作:
index.ts
const options = {
method: 'PATCH',
headers: { "Content-Type": 'application/json', authorization: `Bearer ${accessToken}`},
body: body
};
const userResponse = await fetch(usersEndpoint, options);
const jsonResult = await userResponse.json();
context.res = {
body: jsonResult
};
当它点击“awaituserResponse.json()”时,我得到“body used already for”错误。我有另一个测试,它以类似的方式设置,所以我不知道为什么它说身体是从等待获取调用用完。任何帮助将不胜感激。
2条答案
按热度按时间jdzmm42g1#
响应对象应该在每个请求中使用一次,而模拟的
fetch
为多个请求返回相同的对象。此外,它应该返回响应的promise,而不是响应本身。一个正确的方法来嘲笑它是:
没有必要使用
Response
并遵循它施加的限制,特别是因为Node中没有原生Response
。它可以是:
13z8s7eq2#
我的问题是我调用了另一个使用fetch的函数,它正在解决我的模拟实现。有一次我模仿了这个返回值:
最后成功了
@Estus Flask的回答最终也奏效了。