搜索

首页  >  问答  >  正文

使用vitest时出现的TypeError: default不是一个函数

我正在使用 vitest 在我的 vue 应用程序中进行一些单元测试。 我已经编写了一些测试,但它们失败并显示错误消息:“TypeError:默认值不是函数”。 但我在代码中没有使用名为 default() 的函数。

import getInfo from './info';

vi.mock('axios', () => {
    return {
        default: {
            get: vi.fn()
        }
    }
});

test('fn getInfo() should request api with axios.get url', async () => {
    const spyAxios = vi.spyOn(axios, 'get');
    await getInfo('1234');
    expect(spyAxios).toHaveBeenCalledWith(`${process.env.VUE_APP_API_BASE_URL}`);
});

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

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

info.ts 文件如下所示:

import { useLoginStore } from "../../store/LoginStore";
import axios from "axios";

// eslint-disable-next-line
export async function getInfo(param: string) : Promise<any> {
    const loginStore = useLoginStore();
    axios.defaults.headers.common = {'Authorization': `Bearer ${loginStore.accessToken}`};
    
    const request = await axios.get(
        process.env.VUE_APP_API_BASE_URL
    );

    if (request?.status == 200) {
        return request.data;
    }
    else {
        return null;
    }
}

有人知道这是怎么回事吗?

P粉817354783P粉817354783435 天前740

全部回复(1)我来回复

  • P粉985686557

    P粉9856865572023-10-30 13:16:50

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

    vi.mock('axios', () => ({
      default: () => ({
        get: vi.fn(),
        post: vi.fn(),
      }),
    }));

    回复
    0
  • 取消回复