我有一个记录器中间件,它显示即将被调度的操作和下一个状态。
我正在为我的操作编写测试,并在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('abc@123.com', '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: {} }发布于 2016-08-13 09:29:26
您正在尝试测试异步操作。
因此,要回答这个问题,我们可以遵循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,我建议使用moxios包而不是nock。
https://stackoverflow.com/questions/38897409
复制相似问题