2017-05-15 22 views
1

私はあなたのreduxアクションにユニットテストケースを追加しようとしています。単体テストRedux非同期アクション

私はこのために、この

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

ユニットテストが

あるように私の行動の一つが私の行動で thunkpromise-middleware

を使用しています、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で構成され、私はアクションのディスパッチコールにキャッチを追加しました。 ノックがコールを嘲笑していないので、私は今Network Errorを得ています。 moxiosも試しました。axiosisomorphic-fetch,whatwg-fetchに変更しました。

どこが間違っているのですか?

+0

モックストアを正しく設定していますか?すなわち、サンク と約束ミドルウェアを追加する。 – Nick

+0

私は偽のストアでも私の質問を更新しました – Sreevisakh

答えて

0

これは非同期アクションであるため、axios postリクエスト・プロミスが正常に解決されたときに成功アクションをディスパッチする必要があります。

テストで非同期アサーションができるように、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

私は約束ミドルウェアを使用しています。ペイロードが約束であれば、自動的に3つのアクション、すなわち「DELETE_COMMAND_PENDING」、「DELETE_COMAMND_FULFILLED」、「DELETE_COMMAND_REJECTED」をトリガする。私の減速家では、私はこれらの行動を処理しています。したがって、アクションファイルではよりきれいに見えます。それをそのままテストする方法はありますか? – Sreevisakh

+0

特定の条件のもとで、模擬店に正しい行動が送信されることをテストします。たとえば、nockを使用してエラーを出し、PENDINGおよびREJECTEDアクションが両方ともストアにディスパッチされたことを宣言します。 – therewillbecode

関連する問題