비동기 작업을 테스트하기 위해 테스트를 작성했습니다.Redux 비동기 반응 테스트 반응
비동기 동작 시험 :
import { createStore, applyMiddleware } from 'redux';
import initialState from '../reducers/initialState';
import rootReducer from '../reducers/index';
import thunk from 'redux-thunk';
import * as actions from './actions';
import * as ActionTypes from '../constants/constants';
import nock from 'nock';
import { expect } from 'chai';
import API_KEY from '../config/config';
const MOVIES_API = 'https://api.themoviedb.org/3/discover/movie?api_key='+API_KEY;
describe('async actions',() => {
afterEach(() => {
nock.cleanAll();
});
it('creates FETCH_MOVIES_SUCCESS when fetching movies is complete',() => {
nock(MOVIES_API)
.get()
.reply(200, {data: {results: [{title: 'Batman vs Superman'}]}});
const expectedActions = [
{ type: ActionTypes.FETCH_MOVIES },
{ type: ActionTypes.FETCH_MOVIES_SUCCESS, data: {results: [{title: 'Batman vs Superman'}]}}
];
const store = createStore(rootReducer, initialState, applyMiddleware(thunk));
return store.dispatch(actions.fetchMovies()).then(() => {
expect(store.getActions()).to.deep.equal(expectedActions);
});
});
});
행동 : 나는 현재 다음과 같은 오류 TypeError: Cannot read poperty 'then' of undefined
받고 있어요 그리고 내 코드 여기
return store.dispatch(actions.fetchMovies()).then(() => {
에 다음 줄을 가리키는 것은 내 코드입니다
import axios from 'axios';
import * as constants from '../constants/constants';
import API_KEY from '../config/config';
export const fetchMovies =() => {
const MOVIES_API = 'https://api.themoviedb.org/3/discover/movie?api_key='+ API_KEY;
return dispatch => {
dispatch({
type: constants.FETCH_MOVIES
});
axios.get(MOVIES_API).then(function(response) {
dispatch({
type: constants.FETCH_MOVIES_SUCCESS,
data: response.data.results
});
})
.catch(function(res) {
dispatch({
type: constants.FETCH_MOVIES_ERROR,
msg: res.message
});
});
};
};
처음에는 비동기 동작을 테스트하는 것이므로 w가 확실하지 않습니다. 모자가 잘못됐다.
비동기 작업 흐름을 처리하는 방법으로 redux-saga http://yelouafi.github.io/redux-saga/를 언급하고 싶습니다. 장점 중 하나는 비동기 작업의 각 부분을 테스트 할 수 있다는 것입니다. –