reactjs - 使用 jest typescript 的 Axios 模拟类型

标签 reactjs typescript axios jestjs

我在一个类中有以下方法:

import axios from 'axios'

public async getData() {
   const resp = await axios.get(Endpoints.DATA.URL)
   return resp.data
}

然后我尝试设置一个 Jest 测试来执行此操作:

jest.mock('axios')

it('make api call to get data', () => {
   component.getData()
   expect(axios.get).toHaveBeenCalledWith(Endpoints.DATA.URL)
})

问题是,因为我没有模拟返回值,所以它给 resp.data 一个错误,因为我在 null 上调用 data undefined 对象。我花了至少 2 个小时尝试各种方法来让它工作,但我找不到一种方法可以用一些返回值模拟 axios.get

Jest 的文档使用 JavaScript,所以他们给出了这个例子 axios.get.mockResolvedValue(resp)但我无法调用 mockResolvedValue,因为 TypeScript 中的 axios.get 上不存在该方法。

此外,如果您知道除 Jest 之外的其他适用于 React 的优秀测试库可以轻松地为 TypeScript 完成这些工作,请随时分享。

最佳答案

文件开头:

import axios from 'axios';
jest.mock('axios');
const mockedAxios = axios as jest.Mocked<typeof axios>;

现在你可以像往常一样使用它了:

mockedAxios.get.mockRejectedValue('Network error: Something went wrong');
mockedAxios.get.mockResolvedValue({ data: {} });

关于reactjs - 使用 jest typescript 的 Axios 模拟类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51275434/

相关文章:

javascript - 将 react native 侧菜单添加到我的应用程序(来自 react native 元素) - 应用程序在启动时崩溃

reactjs - 在 formik 和 formik-antd 中使用 react-input-mask

javascript - react : how to pass in URLs for REST APIs

node.js - 如果状态为 302,axios 会进入 catch 函数而不是 then

javascript - YouTube API 返回的数据似乎是不可变的?

javascript - 为什么 react 不触发组件更新?

javascript - 如何在 typeScript 中将 $event returnValue 属性设置为 null

javascript - Angular 2 应用程序中 NgOnInit 生命周期 Hook 内移动方法的问题

javascript - 如何拥有 Immutable.js 可选 (TypeScript) Record 类属性

reactjs - 获取响应数据后 React JS & Axios Render