首页 > 解决方案 > 当 axios 请求位于帮助文件中时,开玩笑不模拟 axios 函数

问题描述

我已经让 Jest 成功模拟了我的测试函数的 axios 请求,但是它仅在从正在测试的组件调用 axios 本身时才有效。当我将其切换为使用Request.js我创建的用于规范化请求的帮助文件 () 时,axios 请求不再被嘲笑。

在正在测试的组件中,我尝试像这样放置一个简单的 axios 请求:

axios.request({
    url: '/test'
}).then(data => {
    console.log("Mock data");
    console.log(data);
})

这个请求工作正常,并被我的axios.js文件嘲笑:

module.exports = {
    get: jest.fn(() => Promise.resolve({
            status: 200,
            payload: {}
        }
    )),
    request: jest.fn(() => Promise.resolve("Hello World"))
};

当我注销对请求的响应时,它会返回“Hello World”,这是预期的行为,并表明它被正确地模拟了。

但是,当我为我的助手切换它时,请求不再被嘲笑。

Request.get(routes.client.info)
    .then(data => {
        console.log("DATA");
        console.log(data);
    })
    .catch(err => console.log(err));

.get 方法存在于 Request 类中,如下所示:

static get(url, {params = {}, headers = {}} = {}, returnFullResponse = false) {
    return this.request(url.get || url, {
        method: "GET",
        body: {},
        headers,
        params
    }, returnFullResponse);
}

该方法执行request执行 axios 请求的方法:

static request(url, {method, body = {}, headers = {}, params = {}}, returnFullResponse) {
        return new Promise((resolve, reject) => {
            axios.request({
                url,
                method,
                responseType: 'json',
                data: body,
                headers,
                params
            })
                .then(result => {
                    if(GLOB_VARS && GLOB_VARS.debugMode) {
                        super.logRequest(url, method, result.data);
                    }
                    result = returnFullResponse ? result : result.data;
                    resolve(result);
                })
                .catch(err => {
                    if(err.response && err.response.status && err.response.statusText) {
                        super.logError(url, err.response.status, err.response.statusText);
                        const { status, statusText, data } = err.response;
                        reject({
                            status: status,
                            message: statusText,
                            data: data
                        });
                    }
                    else {
                        reject({
                            status: null,
                            message: err
                        })
                    }
                })
        });
    }

我不确定为什么它没有像在我的组件文件中那样被模拟我可以成功地模拟requestAxios 上的方法但是当我使用帮助器发出请求时,我undefined从 axios 返回输出。

有任何想法吗?

标签: javascriptreactjsunit-testingjestjsaxios

解决方案


推荐阅读