我有一个异步动作创建器,它分为两个动作,一个表示动作的开始,另一个表示结束。异步动作创建者中间的 Web 请求依赖于第一次同步调度设置的值:
export function changeFilter(from, to) {
return (dispatch, getState, { fetch }) => {
// Updates the state with the new values and sets a loading flag
dispatch(changeFilterRequest(from, to));
// Now I want to use those newly-set values to build a query
// string. However, the stubbed implementation of `dispatch`
// doesn't use reducers, so `getState` continues to return the
// original value.
const { activeUsers } = getState();
return doSomeWebRequest(fetch, activeUsersParams(activeUsers))
.then(response => dispatch(changeFilterSuccess(response)))
};
}
redux-mock-store 的 dispatch 的实现非常稀疏,而且(显然)事后看来,我们从不将任何 reducer 传递给 mocked store。
这意味着第一个dispatch
调用没有机会更新第二个调度调用所依赖的状态。然后,我们发出的 Web 请求具有原始值to
和from
日期,而不是来自异步操作调用的更新值。
我想避免直接使用传入的from
andto
值,changeFilter
因为可能会对changeFilterRequest
. 直接依赖结果getState
也将允许我干掉少数以不同方式过滤的类似方法。
对于这些类型的测试,我应该遵循什么模式吗?我应该以不同的方式来构建我的动作创建者吗?