тестирование Promise.all вернулся из отправленного действия с шуткой и энзимом - PullRequest
0 голосов
/ 21 ноября 2018

У меня возникли серьезные проблемы с пониманием того, как проверить создателя асинхронных действий.Действие извлекает данные в 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);
      });
  });
});

Я действительно запутался, пытаясь проверить это правильно с шуткой / энзимом.

...