如何在 Promise.all 中对 Redux thunk dispatches 进行单元测试



假设我有两个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 调度是否被执行?

在你的第三个函数中 -

  1. doSomething = dispatch => ... <returnValue>,称为doSomething()(dispatchMock)
  2. 它将dispatch绑定到undefined并调用returnValue(dispatchMock)

那么什么是returnValue

  1. returnValuedoSomething()的结果
  2. 这是Promise.all(fetches)...

所以... 类型不匹配 -

  1. returnValue(dispatchMock)说"用这个参数调用函数returnValuedispatchMock
  2. returnValue是一个承诺,而不是一个函数。

也许你的意思是——

const doSomething = () => dispatch => ...`

最新更新