У меня возникли серьезные проблемы с пониманием того, как проверить создателя асинхронных действий.Действие извлекает данные в github api, который получает информацию о пользователе, а также извлекает его репозитории, я помещаю их в Promise.all (), чтобы разрешить их как 1 обещание, и я не вижу никаких подсказок, чтобы проверить это правильным способом для имитации fetchData
вот действие:
import fetch from 'isomorphic-fetch';
import apikey from '../../apikey';
import {
fetchUserBegin,
fetchUserInfoSucces,
fetchUserError,
fetchUserReposSuccess,
fetchUserLoadingEnd,
} from './index';
const apkey = process.env.NODE_ENV === 'production' ? '' : apikey;
export function fetchData(url) {
return (
fetch(url)
.then(result => result.json())
);
}
export default function takeUserNameAndFetchData(name) {
const userInfoUrl = `https://api.github.com/users/${name}${apkey}`;
const userRepoUrl = `https://api.github.com/users/${name}/repos${apkey}`;
return (dispatch) => {
dispatch(fetchUserBegin());
return Promise.all([
fetchData(userInfoUrl),
fetchData(userRepoUrl),
])
.then(([info, repos]) => {
console.log(info, repos);
dispatch(fetchUserInfoSucces(info));
dispatch(fetchUserReposSuccess(repos));
dispatch(fetchUserLoadingEnd());
})
.catch((err) => {
dispatch(fetchUserError(err));
});
};
}
и вот мой тест:
import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import fetchMock from 'fetch-mock';
import * as types from '../../src/actions/types';
import takeUserNameAndFetchData from '../../src/actions/fetchData';
const middlewares = [thunk];
const mockStore = configureMockStore(middlewares);
describe('testing fetchData actions', () => {
afterEach(() => {
fetchMock.restore();
});
test('should pass user name and fetch data', () => {
fetchMock.getOnce('*', {
body: [
{ userInfo: {} },
{ userRepos: [] },
],
});
const expectedActions = [
{ type: types.FETCH_USER_BEGIN },
{ type: types.FETCH_USER_INFO_SUCCESS, payload: { body: { userInfo: {} } } },
{ type: types.FETCH_USER_REPOS_SUCCESS, payload: { body: { userRepos: [] } } },
{ type: types.FETCH_USER_LOADING_END },
];
const store = mockStore({ userInfo: {}, userRepos: [] });
return store.dispatch(takeUserNameAndFetchData())
.then(() => {
const actualActions = store.getActions().map(action => action.type);
expect(actualActions).toEqual(expectedActions);
});
});
});
Я действительно запутался, пытаясь проверить это правильно с шуткой / энзимом.