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

在Vitest中Mock Axios时遭遇两处TypeScript错误,求解决方案

Vitest Mock Axios时的TypeScript错误解决指南

第一个错误:mockImplementationOnce不存在

这个错误是因为TypeScript无法识别axios.get已经被Vitest转化为mock函数。你通过vi.Mocked<typeof axios>断言axios对象的做法是正确的,这段代码可以保留:

import { vi, expect, it } from "vitest";
import axios from "axios";

vi.mock("axios");

const mockAxios = axios as vi.Mocked<typeof axios>

it("Should return valid value", async () => {
  mockAxios.get.mockImplementationOnce(() =>
    Promise.resolve({
      data: { completed: false, title: "dummy data for mocking", userId: 1 },
    })
  );
  // 你的测试逻辑
});

第二个错误:Cannot find namespace 'vi'

这个问题出在mocks文件夹的mock文件中,解决方式如下:

方法一:使用全局vi对象(推荐)

Vitest会在测试环境自动注入全局vi,直接移除mock文件中的import { vi } from "vitest"即可:

// __mocks__/axios.ts
export default {
  get: vi.fn(() =>
    Promise.resolve({
      data: { completed: false, title: "dummy data for mocking", userId: 1 },
    })
  ),
};

如果TypeScript仍然报错,检查tsconfig.json是否添加了Vitest类型:

{
  "compilerOptions": {
    "types": ["vitest"]
  }
}

方法二:显式导入并别名vi

若不想依赖全局对象,可导入vitest的vi并取别名使用:

// __mocks__/axios.ts
import { vi as vitestVi } from "vitest";

export default {
  get: vitestVi.fn(() =>
    Promise.resolve({
      data: { completed: false, title: "dummy data for mocking", userId: 1 },
    })
  ),
};

额外提示

  • Vitest默认识别根目录下的__mocks__文件夹(双下划线),如果你的文件夹是mocks,需要在vi.mock中指定路径:vi.mock("axios", { mock: () => import("../mocks/axios") })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:07:41