2016-08-11 18 views
0

ディスパッチするアクションと次の状態を示すロガーミドルウェアがあります。reducex-mock-storeストアの状態がアクションのディスパッチ後に更新されない

私は私の行動のためのテストを書いています。私は偽の店で行動をディスパッチしています。これらは正常にディスパッチされますが、モックストア状態は更新されていません(前述のロガーで示されています)。

ご注意私はredux-mock-storeを使用しています。

//authActionTest.js 

it('creates LOGIN_SUCCESS when successful login has occured',()=>{ 

//array of expected actions to be dispatched. 
const expectedActions = [ 
    { type: constants.LOGIN_REQUEST }, 
    { type: 'LOGIN_SUCCESS', 
      payload: { 
       uid: '123abc', 
       role: 'clinician' 
    }} 
] 
const store = mockStore({ auth : {} }) 

return store.dispatch(actions.loginUser('[email protected]', 'password123')) 
expect(store.getActions()).toEqual(expectedActions) 
}) 

ロガーは、次のことを示しています

//logger 
dispatching({ type: 'LOGIN_REQUEST }) 
next state { auth: {} } 
dispatching({ type: 'LOGIN_SUCCESS', 
    payload: { uid: 123, 
       role: 'clinician' 
      }) 
next state { auth: {} } 

答えて

0

あなたは非同期アクションをテストしようとしています。

この質問に答えるために、私たちはreduxのドキュメントが示唆していることに従うことができます。

describe('async actions',() => { 
    afterEach(() => { 
     nock.cleanAll(); 
    }); 
    it('creates LOGIN_SUCCESS on successful login',() => { 
     nock('http://example.com/') 
     .get('/login') 
     .reply(200, payload: { uid: 123, role: 'clinician' }); 

     const expectedActions = [ 
     { type: types.LOGIN_REQUEST }, 
     { type: types.LOGIN_SUCCESS, payload: { uid: 123, role: 'clinician' } }, 
     ]; 
     const store = mockStore({ auth: {} }); 

     return store.dispatch(actions.loginUser()) 
     .then(() => { // return of async actions 
      expect(store.getActions()).toEqual(expectedActions); 
     }); 
    }); 
    }); 

上記のコードを変更する必要がある場合があります。

axiosを使用している場合は、nockの代わりにmoxiosパッケージを使用することをお勧めします。

+0

@ josh-haleさんはこの仕事をあなたのためにしましたか? – anoop

関連する問題