繁体   English   中英

如何使用 axios.create 函数在 React 中模拟 axios

[英]How to mock axios in React with using axios.create function

我正在研究 React 项目,在该项目中我将 axios 用于 http 请求。 我有一个带有 axios 配置的单独文件,如下所示:

import axios from 'axios'

export default axios.create({
    baseURL: " http://localhost:3001",
    params: {
    }
})

我在行动 thunk 创造者中使用这个,如下所示:

import streams from "../apis/streams";
export const fetchStreams = () => {
    return async(dispatch: ThunkDispatch<void, State, Action>)  => {
        const response: AxiosResponse<Stream[]> = await streams.get<Stream[]>('/streams');
        dispatch({type: ActionType.FETCH_STREAMS, payload: response.data});
    }
} 

首先我创建了“src/__mocks__/axios.ts”文件,如:

const mockedAxios: any = jest.createMockFromModule('axios');

mockedAxios.create = jest.fn(() => mockedAxios);

export default mockedAxios; 

然后我写了如下测试:

import mockedAxios, {AxiosResponse} from "axios";
import streamsApi from '../apis/streams'
import expectedStreams from "../mocks/expectedStreams";
jest.mock('axios')

describe('fetchStreams action', () => {

    it('Store is updated correctly', async () => {
        const mockedResponse: AxiosResponse = {
            data: expectedStreams,
            status: 200,
            statusText: 'OK',
            headers: {},
            config: {}
        }
        mockedAxios.get.mockImplementationOnce(() => {
            Promise.resolve(mockedResponse);
        })
        const results = await streamsApi.get('/streams');
        expect(results.data).toBe(mockedResponse.data);
    });
});

不幸的是,我收到了这样的错误:

在此处输入图片说明

这是为什么? 在这种情况下,如何正确创建 facke API 响应? 我将不胜感激。

好的,我知道出了什么问题。 我忘记在 Promise 之前添加 return ,如下所示:

mockedAxios.get.mockImplementationOnce(() => {
            return Promise.resolve(mockedResponse);
        })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM