我有一個異步操作創建器,它被分成兩個動作,一個用來表示一個動作的開始,另一個表示動作的結束。在異步行動的創建者中間的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)))
};
}
的implementation of redux-mock-store's dispatch是相當稀疏,而在(明顯)事後,我們從來沒有通過任何減速的嘲笑商店。
這意味着第一個dispatch
調用沒有機會更新第二個調度調用依賴的狀態。我們所做的Web請求具有to
和from
日期的原始值,而不是異步操作調用中的更新值。
我想避免直接使用到changeFilter
傳遞因爲可能有內changeFilterRequest
施加到參數進一步轉化的from
和to
值。直接依靠getState
的結果也可以讓我幹掉少數幾種以不同方式過濾的類似方法。
這些類型的測試應該遵循什麼樣的模式?我應該採用不同的方式來組織我的行動創造者嗎?