javascript - 如何模拟 axios.create([config]) 函数以返回其实例方

我正在尝试模拟 axios.create() 因为我在整个应用程序中使用它的实例并且显然需要它的所有实现被模拟破坏,因此无法获得结果正确的获取、发布方法。

这是代码在实际文件中的样子:

 export const axiosInstance = axios.create({
        headers: {
           ...headers
        },
        transformRequest: [
            function (data, headers) {
                return data;
            },
        ],
    });
    const response = await axiosInstance.get(endpoint);

这是测试文件中 axios 的模拟设置

   jest.mock('axios', () => {
        return {
            create: jest.fn(),
            get: jest.fn(() => Promise.resolve()),
        };
    }
);

我怎样才能获得 axiosInstance 变量中的所有实例方法,而不是仅仅拥有一个什么都不做的模拟函数?

axios.create 和实例方法的文档:https://github.com/axios/axios#instance-methods

最佳答案

您可以使用 jest 的 genMockFromModule .它将为每个模块的方法生成 jest.fn(),您将能够在 create 上使用 .mockReturnThis() 来返回相同的实例。

例子:

./src/__mocks__/axios.js
const axios = jest.genMockFromModule('axios');

axios.create.mockReturnThis();

export default axios;
working example

编辑:

Jest 26.0.0+ 重命名为 jest.createMockFromModule

关于javascript - 如何模拟 axios.create([config]) 函数以返回其实例方法而不是用模拟覆盖它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60428640/

相关文章:

sql - 我如何允许sql中的重复值?

swiftui - 使用 SwiftUI 实现 PencilKit 撤消功能

amazon-web-services - 使用 axios 和 aws4 向 aws 进行身份验证

javascript - 运算符 '<' 不能应用于类型 'Date' 和 'number' .ts

three.js - 如何使用 threejs 在 iPhone 上启用视网膜分辨率 render.

c# - 获取错误 System.IO.IOException : 'The process can

javascript - 显示到小数点后两位 - React.Js

c++ - 如何解决 C++ std::string_view 超出范围的问题?

python - 如何在python中创建文件夹?

c++ - 如何正确删除C++中的指针?