Как мне написать юнит-тест jest для axios с заголовком конфигурации.
Я переместил все мои запросы API-запросов в промежуточное программное обеспечение Redux и теперь мне нужно создать модульный тест.Я сталкиваюсь с проблемой при издевательстве вызова запроса axios с помощью axios (config).Есть ли правильный способ смоделировать запрос axios?
Мой api-middleware
const apiMiddleware = ({ dispatch, getState }) => next => action => {
if (action.type !== API) {
return next(action);
}
const {
apiEndPoint,
method,
data,
onSuccess,
onFailure,
label
} = action.payload;
const url = API_URL + apiEndPoint;
const accessToken = getState().user.info.token;
const headers = {};
headers["Content-Type"] = "application/json";
headers["Authorization"] = "Bearer " + accessToken;
dispatch(fetchStarted());
axios({
method,
url,
data,
headers,
responseType: "json",
timeout: 5000
})
.then(response => {
const { isError, message } = response.data;
isError ? onFailure() : onSuccess();
if (message) ToastMessage(message);
dispatch(fetchSuccess(message || ""));
})
.catch(error => {
dispatch(fetchFailed("Error Message"));
ToastMessage(errorMessage);
});
};
export default apiMiddleware;
мой тест
import apiMiddleware from "../api-middleware";
import configureStore from "redux-mock-store";
import axios from 'axios';
import {FETCH_SUCCESS,API} from "../../actions/actionTypes";
jest.mock('axios');
axios.mockResolvedValue();
const mockStore = configureStore([]);
describe("apiMiddleware", () => {
let next,
dispatch,
getState,
middleware,
ToastMessage,
dispatchCalls,
nextCalls,
ToastMessageCalls;
beforeEach(() => {
next = jest.fn();
dispatch = jest.fn();
ToastMessage = jest.fn();
const state = {
user: { info: { token: "dummyToken" } }
};
getState = mockStore(state).getState;
dispatchCalls = dispatch.mock.calls;
nextCalls = next.mock.calls;
ToastMessageCalls = ToastMessage.mock.calls;
middleware = apiMiddleware({ dispatch, getState })(next);
});
it("should dispatch FETCH_SUCCESS", () => {
const method = "POST",
url = "app.json",
data = { "data": "dsa" },
headers = {},
responseType = "json",
timeout = 5000;
return axios({
method,
url,
data,
headers,
responseType,
timeout
}).then(() => {
expect(dispatchCalls[1]).toEqual([{ type: FETCH_SUCCESS }]);
});
});
});