假设我有两个Redux thunk函数,如下所示:
const fetchUser = () => {
return dispatch => {
return fetch('/my-user-endpoint').then(res => {
dispatch(updateUserInfo(res))
})
}
}
const fetchSomethingElse = () => {
return dispatch => {
return fetch('/my-other-endpoint').then(res => {
dispatch(updateOtherInfo(res))
})
}
}
然后是一个公开的函数,该函数使用Promise.all
将提取调用捆绑在一起。
export const doSomething = () => {
return dispatch => {
dispatch(firstDoThis())
dispatch(thenDoThis())
const fetches = [dispatch(fetchUserInfo()), dispatch(fetchSomethingElse())]
return Promise.all(fetches).then(() => {
dispatch(finallyDoThis())
})
}
}
在尝试对此进行测试时,我执行以下操作:
it('Test', async () => {
await doSomething()(dispatchMock)
expect(dispatchMock).toHaveBeenCalledTimes(5)
})
相反,我只收到 3 个调度而不是 5 个。我将如何测试Promise.all
中的 Redux thunk 调度是否被执行?
在你的第三个函数中 -
doSomething = dispatch => ... <returnValue>
,称为doSomething()(dispatchMock)
- 它将
dispatch
绑定到undefined
并调用returnValue(dispatchMock)
。
那么什么是returnValue
?
returnValue
是doSomething()
的结果- 这是
Promise.all(fetches)...
所以... 类型不匹配 -
returnValue(dispatchMock)
说"用这个参数调用函数returnValue
,dispatchMock
- 但
returnValue
是一个承诺,而不是一个函数。
也许你的意思是——
const doSomething = () => dispatch => ...`