gpt4 book ai didi

javascript - Jest - TypeError : response. json 不是函数

转载 作者:行者123 更新时间:2023-12-02 22:40:41 25 4
gpt4 key购买 nike

我们正在对 React-Native 应用程序(使用 Jest)进行单元测试,该应用程序使用 fetch 执行各种 API 调用。

我们在 API 调用函数中模拟了对 fetch 的调用,以便对其进行测试。到目前为止效果很好。我们还有组合这些 API 调用并对其进行一些逻辑操作的函数。

例如,下面是一个函数,给定 token 后,该函数将获取相关用户的第一个项目 (project[0]) 并返回该项目中的项目列表。

export async function getAllItems(token) {
try {
const response = await getCurrentUser(token); // fetch called inside
const responseJson = await response.json();
const allItemsResp = await getAllItemsFromSpecificProject(
token,
responseJson.projectIds[0],
); // fetch called inside
return await allItemsResp.json();
} catch (error) {
console.log(error);
return null;
}
}

两个函数 getCurrentUsergetAllItemsFromSpecificProject 都是简单的 fetch 调用,目前已正确模拟。下面是一个尝试测试 getAllItems 函数的测试:

it('Gets all items', async () => {
getAccessTokenMockFetch();
const token = await getAccessToken('usherbrooke@powertree.io', 'test!23');

getAllItemsMockFetch();
const items = await getAllItems(token.response.access_token);

expect(items.response.length).toEqual(3);
});

为了清楚起见,以下是 getAccessTokenMockFetch 的完成方式。 getAllItemsMockFetch 几乎相同(响应中的数据不同):

function getAccessTokenMockFetch() {
global.fetch = jest.fn().mockImplementation(() => {
promise = new Promise((resolve, reject) => {
resolve(accepted);
});

return promise;
});
}

其中accepted包含成功调用的JSON内容。当我们运行此测试时,我们收到以下错误:

TypeError: Cannot read property 'response' of null

我们 console.log 中的这个:

TypeError: response.json is not a function

这解释了为什么响应为null。似乎 json() 调用不被理解,我不知道如何模拟它。我对 Stack Overflow 及其他领域进行了大量研究,但没有发现任何内容可以帮助我理解如何解决此问题。这可能表明我在这方面走错了路,这很有可能,因为我是 JavaScript、React Native 和 Jest 的新手。

最佳答案

要尝试的一件事是给它一个假的 json 来调用,如下所示:

const mockFetch = Promise.resolve({ json: () => Promise.resolve(accepted) });
global.fetch = jest.fn().mockImplementation(() => mockFetchPromise);

关于javascript - Jest - TypeError : response. json 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58599735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com