ts中使用jest:“mockResolvedValue不是一个函数”的问题解决

文章描述了在使用jest进行单元测试时遇到axios.get.mockResolvedValue方法报错的情况,提出了解决方案,即直接重写axios.get为jest.fn().mockResolvedValue,或者使用jest.spyOn来模拟返回值。示例代码展示了如何正确地对axios.get进行mock以替代真实请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mock axios本质上就是mock axios的返回值,让其返回值取代真实的返回值,官网给的写法如下

import axios from 'axios';
import Users from './users';

jest.mock('axios');

test('should fetch users', () => {
  const users = [{name: 'Bob'}];
  const resp = {data: users};
  axios.get.mockResolvedValue(resp);

  // or you could use the following depending on your use case:
  // axios.get.mockImplementation(() => Promise.resolve(resp))

  return Users.all().then(data => expect(data).toEqual(users));
});

但是在正式使用的时候会报错:mockResolvedValue不是一个函数。

其实就是get当中没有这样的一个属性吧,可以这样解决

jest.mock('axios');
test("3",async()=>{
    // 测试一下axios的mock
    const users = [{name: 'Bob'}];
    const resp = {data: users};
    axios.get=jest.fn().mockResolvedValue(resp);
    // (axios.get as any).mockImplementation(() => Promise.resolve(resp))
    let res=await getAxios()
    expect(res).toEqual(users)
})

忘记了,getAxios的内容是这样的

import axios from "axios";
export const getAxios = async () => {
  const res = await axios.get('/api');
  return res.data;
}

实际上就是把get重新赋值了吧,此外下面那种注释掉的写法也是可以的。

更新:这样的写法其实也挺好的

jest.spyOn(axios, 'get').mockResolvedValue({ data: { id: 2, name: 'User' } })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值