Bob*_*ane 0 javascript json jestjs react-native fetch-api
我们正在对 React-Native 应用程序(使用 Jest)进行单元测试,该应用程序使用fetch.
fetch为了测试它们,我们模拟了 API 调用函数中的调用。到目前为止效果很好。我们还有组合这些 API 调用并对其进行一些逻辑操作的函数。
例如,下面是一个函数,给定令牌后,该函数将获取相关用户的第一个项目 ( project[0]) 并返回该项目中的项目列表。
export async function getAllItems(token) {\n try {\n const response = await getCurrentUser(token); // fetch called inside\n const responseJson = await response.json();\n const allItemsResp = await getAllItemsFromSpecificProject(\n token,\n responseJson.projectIds[0],\n ); // fetch called inside\n return await allItemsResp.json();\n } catch (error) {\n console.log(error);\n return null;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n函数getCurrentUser和getAllItemsFromSpecificProject都是简单的fetch调用,目前已正确模拟。这是一个尝试测试该getAllItems功能的测试:
it('Gets all items', async () => {\n getAccessTokenMockFetch();\n const token = await getAccessToken('usherbrooke@powertree.io', 'test!23');\n\n getAllItemsMockFetch();\n const items = await getAllItems(token.response.access_token);\n\n expect(items.response.length).toEqual(3);\n});\nRun Code Online (Sandbox Code Playgroud)\n为了清楚起见,这里是如何getAccessTokenMockFetch完成的。getAllItemsMockFetch几乎相同(响应中的数据不同):
function getAccessTokenMockFetch() {\n global.fetch = jest.fn().mockImplementation(() => {\n promise = new Promise((resolve, reject) => {\n resolve(accepted);\n });\n\n return promise;\n });\n}\nRun Code Online (Sandbox Code Playgroud)\n其中accepted包含成功调用的JSON内容。当我们运行此测试时,我们收到以下错误:
\nTypeError: Cannot read property 'response' of null\nRun Code Online (Sandbox Code Playgroud)\n而我们console.log这一点就在其中:
TypeError: response.json is not a function\nRun Code Online (Sandbox Code Playgroud)\n这解释了为什么响应是null. 看来这个json()调用不被理解,我不知道如何嘲笑它。我对 Stack\xc2\xa0Overflow 及其他方面进行了大量研究,但我们没有发现任何内容可以帮助我理解如何解决这个问题。这可能表明我在这方面走错了路,这很有可能,因为我是 JavaScript、React Native 和 Jest 的新手。
可以尝试的一件事是给它一个假的json调用,如下所示:
const mockFetch = Promise.resolve({ json: () => Promise.resolve(accepted) });
global.fetch = jest.fn().mockImplementation(() => mockFetchPromise);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8613 次 |
| 最近记录: |