TypeError:使用 vitest 时默认值不是函数

Flo*_*ian 7 unit-testing vue.js vitest

我正在使用 vitest 在我的 vue 应用程序中进行一些单元测试。\n我编写了一些测试,但它们失败并显示错误消息:“TypeError: default is not a function”。\n但我不使用名为 default 的函数() 在我的代码中。

\n
import getInfo from './info';\n\nvi.mock('axios', () => {\n    return {\n        default: {\n            get: vi.fn()\n        }\n    }\n});\n\ntest('fn getInfo() should request api with axios.get url', async () => {\n    const spyAxios = vi.spyOn(axios, 'get');\n    await getInfo('1234');\n    expect(spyAxios).toHaveBeenCalledWith(`${process.env.VUE_APP_API_BASE_URL}`);\n});\n
Run Code Online (Sandbox Code Playgroud)\n

如果我然后执行npm run test结果如下:

\n
 FAIL  src/api/info/info.test.js > fn getInfo() should request api with axios.get url\nTypeError: default is not a function\n \xe2\x9d\xaf src/api/info/info.test.js:61:22\n     59| test('fn getInfo() should request api with axios.get url', async () => {\n     60|     const spyAxios = vi.spyOn(axios, 'get');\n     61|     await getInfo('1234');\n       |                  ^\n     62|     expect(spyAxios).toHaveBeenCalledWith(`${process.env.VUE_APP_API_BASE_URL}`);\n     63| });\n
Run Code Online (Sandbox Code Playgroud)\n

info.ts 文件如下所示:

\n
import { useLoginStore } from "../../store/LoginStore";\nimport axios from "axios";\n\n// eslint-disable-next-line\nexport async function getInfo(param: string) : Promise<any> {\n    const loginStore = useLoginStore();\n    axios.defaults.headers.common = {'Authorization': `Bearer ${loginStore.accessToken}`};\n    \n    const request = await axios.get(\n        process.env.VUE_APP_API_BASE_URL\n    );\n\n    if (request?.status == 200) {\n        return request.data;\n    }\n    else {\n        return null;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

有谁知道这是怎么回事?

\n

Mar*_*rom 3

返回对象中的属性default不是函数 ( default: {...})。相反,您会返回如下内容:

vi.mock('axios', () => ({
  default: () => ({
    get: vi.fn(),
    post: vi.fn(),
  }),
}));
Run Code Online (Sandbox Code Playgroud)