You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Vitest对axios.create创建的实例进行单元测试?

解决Vue+TypeScript单元测试中axios.create实例mock报错问题

错误原因

你遇到的TypeError: Cannot read properties of undefined (reading 'get'),是因为当前仅mock了axios本身的get方法,但clientsApi是通过axios.create()创建的独立实例,这个实例的get方法未被mock,导致调用时为undefined。

解决方案

方法一:Mock axios.create返回的实例

让axios.create()返回一个带有mockget方法的实例,覆盖原实例创建逻辑:

import axios from 'axios';
import { getCLients } from '../src/clients/composables/useClients';
import mockClients from './path/to/mockClients'; // 替换为你的mock数据路径

vi.mock('axios');

describe('getCLients', () => {
  it('应正确返回客户端数据', async () => {
    // 创建带mock get方法的axios实例
    const mockAxiosInstance = {
      get: vi.fn().mockResolvedValue({ data: mockClients })
    };
    // 让axios.create返回该mock实例
    (axios.create as vi.Mock).mockReturnValue(mockAxiosInstance);

    const result = await getCLients();
    // 验证返回结果
    expect(result).toEqual(mockClients);
    // 验证get方法的调用参数
    expect(mockAxiosInstance.get).toHaveBeenCalledWith('/clients');
    // 验证axios.create的初始化参数
    expect(axios.create).toHaveBeenCalledWith({
      baseURL: import.meta.env.VITE_API_URL
    });
  });
});

方法二:直接Mock clientsApi模块

跳过mock axios的步骤,直接mockclientsApi模块的默认导出(即目标axios实例),这种方式更简洁:

import { getCLients } from '../src/clients/composables/useClients';
import mockClients from './path/to/mockClients';

// 直接mock clientsApi模块
vi.mock('../src/clients/api/clientsApi', () => ({
  default: {
    get: vi.fn().mockResolvedValue({ data: mockClients })
  }
}));

describe('getCLients', () => {
  it('应正确返回客户端数据', async () => {
    const result = await getCLients();
    expect(result).toEqual(mockClients);

    // 导入mock的clientsApi验证调用行为
    const clientsApi = (await import('../src/clients/api/clientsApi')).default;
    expect(clientsApi.get).toHaveBeenCalledWith('/clients');
  });
});

注意事项

  • 确保vi.mock()的路径与实际文件路径一致,避免路径错误导致mock失效
  • 使用Vitest时,类型断言用vi.Mock代替jest.Mocked更贴合框架类型
  • 测试前可通过vi.resetModules()清除模块缓存,避免交叉测试互相影响

内容的提问来源于stack exchange,提问作者alain_maza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:15:34