Я занимаюсь разработкой приложения, в котором есть две функции: fetchAnonymous и fetchAuthenticated, которые проверяют, вошел ли пользователь в систему или нет. Если он не вошел в систему, отправляет действие для выхода пользователя из системы для перенаправления на экран входа в систему. Проблема в том, что когда я импортирую хранилище в этом файле, чтобы использовать метод отправки, мои тесты выдают ошибки. Как я могу высмеять это, чтобы тесты могли пройти?
апи / base.js
import appStore from 'store';
import { getToken } from 'api/session';
export async function fetchAuthenticated(path, config) {
const currentToken = await getToken();
if (!currentToken) {
appStore.dispatch({type: "SESSION_LOGOUT"});
return { error: new APIError(path, {status: 401}, "missing token") };
}
let headers = config.headers || {};
headers = {
...headers,
Authorization: "Bearer " + currentToken
}
return await fetchAnonymous(path, {
...config,
headers
});
}
export async function fetchAnonymous(path, config){
let response;
let url = `${API_ENDPOINT}/${path}`;
try {
response = await fetch(`${API_ENDPOINT}/${path}`, {
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
...config
});
} catch (err) {
return { error: new NetworkError(err.message) };
}
if(response.status == 401 || response.status == 403){
appStore.dispatch({type: "SESSION_LOGOUT"});
return { error: new APIError(path, response, 'Missing Authentication')}
}
if(response.status != 200 && response.status != 201 && response.status != 204){
try {
const json = await response.json();
return { error: new APIError(path, response, json.error) };
} catch (err) {
return { error: new APIError(path, response, err.message) };
}
}
try {
const json = await response.json();
return { response: json };
} catch (err) {
return { error: new APIError(path, response, err.message) };
}
}
export class NetworkError extends Error {
constructor(message) {
super(message);
this.name = "NetworkError";
this.message = message;
}
}
export class APIError extends Error {
constructor(path, response, message = "Try again :(") {
super(`Unexpected response from ${path}, received ${response.status}: ${message}`);
this.message = message;
this.name = "APIError";
this.status = response.status;
}
}
магазин / index.js
import { createStore, applyMiddleware } from 'redux';
import createSagaMiddleware from "redux-saga";
import { createLogger } from 'redux-logger';
import sagas from 'sagas';
import reducers from 'reducers';
import {
createReactNavigationReduxMiddleware
} from 'react-navigation-redux-helpers';
const sagaMiddleware = createSagaMiddleware();
const loggerMiddleware = createLogger({collapsed: true});
const navigationMiddleware = createReactNavigationReduxMiddleware(
state => state.nav,
);
const middlewares = [
sagaMiddleware,
navigationMiddleware
]
if (process.env.NODE_ENV === `development`) {
middlewares.push(loggerMiddleware);
}
const store = createStore(
reducers,
applyMiddleware(...middlewares)
);
sagaMiddleware.run(sagas);
export default store;