玩笑-TypeError:response.json不是函数

问题描述 投票:0回答:1

我们正在对React-Native应用程序(使用Jest)进行单元测试,该应用程序使用fetch进行各种API调用。为了测试它们,我们在API调用函数中模拟了对fetch的调用。到目前为止,效果很好。我们还有结合这些API调用并对其进行一些逻辑处理的函数。例如,这是一个函数,给定一个标记,它将获得相关用户的第一个项目(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('[email protected]', '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;
  });
}

接受的位置包含成功调用的JSON内容。当我们运行此测试时,我们得到以下错误:

TypeError: Cannot read property 'response' of null

并且我们console.log抓住了这个:

TypeError: response.json is not a function

这解释了为什么响应是null。似乎json()调用不被理解,我也不知道该如何模拟它。我已经对SO以及其他方面进行了大量研究,但是没有发现任何可以帮助我理解如何解决此问题的方法。这可能表明我对此采取了错误的方法,这很可能,因为我是Javascript,React-Native和Jest的新手。

在此问题上的任何帮助将不胜感激。

javascript json react-native jestjs fetch-api
1个回答
0
投票

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

const mockFetch = Promise.resolve({ json: () => Promise.resolve(accepted) });
global.fetch = jest.fn().mockImplementation(() => mockFetchPromise);
© www.soinside.com 2019 - 2024. All rights reserved.