У меня есть проблема, когда мне нужно издеваться над классом Api
, который вызывается в моих действиях с избыточностью, этот класс вызывает axios get, post и т. Д. ..., которые должны быть смоделированы. Я следовал this tutorial explaining how to mock axios and этому учебнику о том, как издеваться над классом, но ни один из подходов не работает.
Теперь для некоторого кода ... вот пример типа действия, которое мне нужно проверить.
export const getAlldata = (id: string) => {
return (dispatch: any) => {
dispatch(beginAjaxRequest(id, types.BEGIN_GET_DATA_AJAX));
return Api.get("/data/data").then((response: any) => {
dispatch(getDataSuccess(response.data, id))
}).catch((error) => {
dispatch(handleAjaxError(id, new Alert({ id: id, title: "Error getting data", message: error.toString(), timestamp: Date.now(), error: true })));
});
}
}
и части Api
это вызывает.
import axios from 'axios';
class Api {
static get(path: string) {
return axios({
method: 'get',
url: (global as any).apiDomain + path,
headers: {
Authorization: "Bearer " + (global as any).authentication.getToken(),
"Content-Type": "application/json"
}
});
}
}
export default Api;
Который я пытался смоделировать в src / mocks / Api (два подчеркивания после и перед mock)
import * as Promise from 'bluebird';
import { getTestData } from '../models/_tests/TestData';
class Api {
static get(path: string) {
switch (path) {
case "/data/data":
return Promise.resolve({
data: getTestData(3)
});
default:
return {};
}
}
}
export default Api;
и настройку в моих настройках.
import * as Enzyme from 'enzyme';
import Api from './__mocks__/Api';
const Adapter = require("enzyme-adapter-react-16");
(global as any).Api = Api;
Enzyme.configure({ adapter: new Adapter() });
и позвонил в моем настоящем тесте ...
describe('thunk actions', () => {
var middleware = [thunk];
var mockStore = configureMockStore(middleware);
afterAll(() => {
cleanAll();
});
test('getAllData gets all data', (done: any) => {
var store = mockStore({});
jest.mock('../../api/Api'); // path to real Api
var id = generateGuid();
store.dispatch<any>((getAllData(id))).then(() => {
done();
});
});
});
Так что, очевидно, это на самом деле ничего не проверяет, я просто пытаюсь заставить это работать, но я продолжаю получать ошибки в реальном Api, а не в макете. Я также попробовал максимировать axios, но я получаю ту же ошибку (не могу получить toToken из undefined), так что, похоже, она не заменяет axios или Api, кто-нибудь может увидеть, где я ошибаюсь?