嘲笑 axios ,使用vitest创建

cdmah0mi  于 2023-04-30  发布在  iOS
关注(0)|答案(1)|浏览(164)

我正在使用axios.create方法创建和配置axios示例。而且我不能让它在vi.fn()的测试中工作,所以我不能Assert是否调用了endpoint。
测试能够从API调用返回数据的解决方法如下所示

return {
    AxiosInstance: {},
    AxiosRequestConfig: {},
    default: {
      post: vi.fn(),
      create: vi.fn(() => {
        return {
          post: (url: string, config: object) => {
            return Promise.resolve({ status: 200 });
          },
          get: (url: string, config: object) => {
            return Promise.resolve({ status: 200 });
          },
          interceptors: {
            request: {
              use: vi.fn(),
              eject: vi.fn(),
            },
            response: {
              use: vi.fn(),
              eject: vi.fn(),
            },
          },
        };
      }),
    },
  };
});

但是想要使用类似于

(axios.get as MockedFunction<typeof axios.get>).mockImplementationOnce(
      () => promise
    );

也许有人用vitest模拟了axios.create,可以共享配置?

lokaqttq

lokaqttq1#

所以把它整理出来,也许会帮助到别人。

vi.mock('axios', () => {
  return {
    default: {
      post: vi.fn(),
      get: vi.fn(),
      delete: vi.fn(),
      put: vi.fn(),
      create: vi.fn().mockReturnThis(),
      interceptors: {
        request: {
          use: vi.fn(),
          eject: vi.fn(),
        },
        response: {
          use: vi.fn(),
          eject: vi.fn(),
        },
      },
    },
  };
});

所以基本上我们模拟axios.create方法返回自身,我们可以这样编写模拟

(axios.post as MockedFunction<typeof axios.post>).mockResolvedValue(
      () => Promise.resolve({ status: 200 })
    );

相关问题