如何在Promise.all中对Redux形式化转换调度进行单元测试

njthzxwz  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(137)

假设我有两个Redux形式转换函数,如下所示:

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调度是否被执行?

tp5buhyn

tp5buhyn1#

在你的第三个功能中-

  1. doSomething = dispatch => ... <returnValue>,被称为doSomething()(dispatchMock)
    1.其将x1M2 N1 x绑定到x1M3 N1 x并调用x1M4 N1 x。
    那么,什么是returnValue
  2. returnValuedoSomething()的结果
    1.也就是Promise.all(fetches)...
    所以...类型不匹配-
  3. returnValue(dispatchMock)表示“使用此参数dispatchMock调用函数returnValue
    1.但是returnValue是一个承诺,而不是一个函数。
    也许你的意思是-
const doSomething = () => dispatch => ...`

相关问题