Javascript Jest-在asyncThunk(Redux工具包)中测试catch块

Javascript Jest-在asyncThunk(Redux工具包)中测试catch块,javascript,reactjs,unit-testing,redux,react-redux,Javascript,Reactjs,Unit Testing,Redux,React Redux,我最近一直在挣扎,因为我正试图修复其他开发人员在离开我工作的公司之前所做的一些测试。它涉及测试CreateAynchThunk内的catch块,thunk的创建如下: export const onEmailSubmit=createAsynchThunk( '电子邮件/onEmailSubmit', 异步(数据,{dispatch,rejectWithValue,getState})=>{ 分派(updateEmail({isLoadingEmailRequest:true})) 试一试{ 常

我最近一直在挣扎,因为我正试图修复其他开发人员在离开我工作的公司之前所做的一些测试。它涉及测试CreateAynchThunk内的catch块,thunk的创建如下:

export const onEmailSubmit=createAsynchThunk(
'电子邮件/onEmailSubmit',
异步(数据,{dispatch,rejectWithValue,getState})=>{
分派(updateEmail({isLoadingEmailRequest:true}))
试一试{
常量响应=等待更新实体(数据)
返回响应.data
}捕捉(错误){
//如果错误没有任何状态代码,则表示存在网络错误
//因此,让我们展示错误模式:
如果(错误请求){
分派(updateErrorModal({showErrorModal:true}))
}
返回rejectWithValue(错误数据)
}
})
测试文件大致如下:

import userReducer,{updateEmail,handleEmailVerify}来自“/EmailSlice”
从'redux mock store'//ES6模块导入configureStore
从“redux thunk”导入thunk
从“../../../http”导入{updateIdentity}
const middleware=[thunk]
const mockStore=configureStore(中间件)
jest.mock(“../../../http/”,()=>({
…jest.requireActual('../../../http/'),
updateIdentity:jest.fn().mockImplementation((数据)=>{
还愿({
SimpleFields值:{
displayName:'测试',
语言:“en_US”
}
})
})
}))
描述('EmailSlice单元测试',()=>{
在每个之前(()=>{
开玩笑
Object.defineProperty(窗口“会话存储”{
价值:{
getItem:jest.fn(()=>null),
setItem:jest.fn(()=>null),
removietem:jest.fn(()=>null)
},
可写:对
})
})
之后(()=>{
开玩笑的,恢复性的
})
//…在这之前有一些测试
它('在调用handleEmailVerify且后端不返回响应时进行测试',异步()=>{
常量错误=新错误()
错误。请求={
消息:“测试”
}
sendVerificationCode.mockImplementation(=>Promise.reject(错误))
const store=mockStore({})
等待store.dispatch(handleEmailVerify())
const actions=store.getActions()
const rejectedActionLoading=操作[1]
expect(rejectedActionLoading.type).toEqual(UpdateMail.type)
expect(rejectedActionLoading.payload).toEqual({isLoadingEmailRequest:true})
const rejectedAction=操作[2]
expect(rejectedAction.type).toEqual(“errorModal/updateErrorModal”)
})
})
问题是测试失败,因为从未达到更新错误模式的调度。我认为这与以下事实有关:模拟的promise sendVerificationCode.mockImplementation(=>promise.reject(error))不会将包含请求对象的对象返回到catch块,因此不会调度updateErrorModal

PS:如果我删除If语句并只发送updateErrorModal,测试就通过了

你们知道怎么解决这个问题吗

谢谢您的时间:)