我有以下动作创建者:
export const doSomething () {
return (dispatch, getState) => {
setTimeout(function () {
dispatch(someAction('bbb'));
}, 3000);
}
}
它将状态的某些部分更改为bbb
,其中状态是从组合的reducer创建的。我该怎么测试呢?
import configureMockStore from 'redux-mock-store'
import thunk from 'redux-thunk'
it('', function (done) {
const middlewares = [ thunk ]
const mockStore = configureMockStore(middlewares)
const store = mockStore({}) // how should the store look like?
return store.dispatch(someAction('bbb'))
.then(() => {
expect(store.getActions()).toEqual(expectedActions)
})
});
模拟商店应该怎么样?这是正确的apporach吗?我该如何测试?
答案 0 :(得分:0)
我认为你试图在一次测试中测试太多,甚至更多,你试图测试你不应该测试的部分(例如存储/发送)。
有一个原因叫它“单元测试”
我会把它改成两个测试:
reducer应该是一个纯函数,给定一个输入它应该返回一个输出(暂时忘记状态),这里只需确保reducer已将值插入到正确的位置。
动作,为调度函数创建一个间谍,并由你自己提供给动作结果函数(myAction()),并使用expect(dispatchSpy).toHaveBeenCalledWith。你也可以轻松创建getState函数:
const getState = () => ({ obj1: 5, obj2: "333"})