2017-05-15 1 views
1

단위 테스트 케이스를 내 redux 작업에 추가하려고합니다. 나는 내 행동에 thunk, promise-middleware단위 테스트 Redux 비동기 작업

내 행동의

일이이

export function deleteCommand(id) { 
    return (dispatch) => { 
    dispatch({ 
     type: 'DELETE_COMMAND', 
     payload: axios.post(`${Config.apiUrl}delete`, { _id: id }) 
    }) 
    } 
} 

단위 테스트처럼되어 사용하고 내가 this을 시도

, this & this

import configureMockStore from "redux-mock-store" 
const middlewares = [thunk, promiseMiddleware()]; 
const mockStore = configureMockStore(middlewares) 

    it('creates DELETE_COMMAND_FULFILLED after deleting entry', (done) => { 

    nock('http://localhost:8081/') 
     .post('/delete',{ 
     _id: 1 
     }) 
     .reply(200, {}) 

    const expectedActions = [{ 
     type: 'DELETE_COMMAND_FULFILLED', 
     payload: {} 
    }] 

    const store = mockStore({ 
     command: { 
     commands: [] 
     } 
    }) 

    store.dispatch(actions.deleteCommand({_id: 1}).then(function() { 
     expect(store.getActions()) 
     .toEqual(expectedActions) 
     done(); 
    }) 

    }) 
내가 nock을 사용하고210

redux-mock-store 그것은 내가 unhandled promise reject 예외를 가지고 다음, 약속을 반환하는 작업을 변경 한 후 then of undefined

제공 promise middleware

, thunk 구성, 나는 행동 파견 호출에 캐치를 추가 . 이제 Nook이 통화를 조롱하지 않기 때문에 Network Error이 표시됩니다. moxios도 시도한 axiosisomorphic-fetch, whatwg-fetch으로 변경했습니다. 작동하지 않는 것 같습니다

어디에서 잘못 했습니까?

+0

모의 상점을 올바르게 구성하고 있습니까? 즉, 및 약속 미들웨어를 추가하십시오. – Nick

+0

나는 모의 상점과 내 질문을 업데이 트했습니다 – Sreevisakh

답변

0

이것은 비동기 액션이므로 액티비티 게시 요청 요청이 성공적으로 해결되면 성공 작업을 보내야합니다.

테스트에서 비동기식 어설 션을 만들 수 있도록 axios.post를 호출하여 반환 된 약속을 반환해야합니다.

export function deleteCommand(id) { 
    return (dispatch) => { 
    dispatch({ type:'DELETE_COMMAND_POSTED' }) 

    return axios.post(`${Config.apiUrl}delete`, { _id: id }) 
     .then((res) => { 
     dispatch({ type: 'DELETE_SUCCESSFUL', payload: res }) 
     }) 
    } 
} 
+0

나는 약속 미들웨어를 사용하고 있습니다. 페이로드가 약속이면, DELETE_COMMAND_FREDED, DELETE_COMMAND_REJECTED, DELETE_COMMAND_PENDING, DELETE_COMMAND_FULFILLED가 자동으로 트리거됩니다. 내 감속인에서 나는 이러한 행동을 처리하고 있습니다. 그래서 액션 파일에서 더 깨끗해 보입니다. 그대로 테스트 할 수있는 방법은 없나요? – Sreevisakh

+0

특정 조건에서 모의 ​​상점에 올바른 조치가 발송되는지 테스트합니다. 예를 들어 nock을 사용하여 오류를 제공 한 다음 PENDING 및 REJECTED 조치가 둘 다 상점에 발송되었음을 주장합니다. – therewillbecode