Jestjs 生成器未捕获来自API调用的错误

Jestjs 生成器未捕获来自API调用的错误,jestjs,generator,Jestjs,Generator,我使用的API不会为不正确的登录返回任何“类似错误”的信息(只是一个带有代码--不正确的\u密码或无效的\u用户名--HTML消息的普通对象),因此在我的API调用函数中,我将代码转换为错误: 导出异步函数loginWithApi(creds){ 试一试{ const res=await axios.get(apirls.login,{params:creds}); if(res.data.data){ 返回res.data; }else if(res.data.code){ 抛出错误(res.

我使用的API不会为不正确的登录返回任何“类似错误”的信息(只是一个带有代码--
不正确的\u密码
无效的\u用户名
--HTML消息的普通对象),因此在我的API调用函数中,我将代码转换为错误:

导出异步函数loginWithApi(creds){
试一试{
const res=await axios.get(apirls.login,{params:creds});
if(res.data.data){
返回res.data;
}else if(res.data.code){
抛出错误(res.data.code.titleize());
}//否则,它应该是一个实际错误
}捕捉(错误){
返回错误;
}
}
它工作正常,抛出正确,应该返回错误

但是,当测试调用此函数的saga generator操作时,错误不会被捕获,它会在
try
块中持续出现:

功能
导出函数*loginSaga({username,password}){
const creds={username,password};
试一试{
const res=收益调用(loginWithApi、creds);
控制台日志(res);
产生put({type:“LOGIN_SUCCESS”,用户:res.data});
}捕获(错误){
产生put({type:“LOGIN_FAILURE”,error});
}
}
测验
描述(“登录操作”,()=>{
让gen;
之后(()=>{
expect(gen.next().done).toBe(true);
});
它(“成功登录时应返回用户对象”,()=>{
gen=loginSaga(success.creds);
gen.next();//调用api
expect(gen.next(mockResponse.success).value.toEqual(
put({type:“LOGIN_SUCCESS”,用户:mockResponse.SUCCESS.data})
);
});
它(“传递无效用户名时应返回错误”,()=>{
gen=loginSaga(badUser.creds);
gen.next();//调用api
//MockResponse.usernameError:错误(“无效用户名”)
expect(gen.next(mockResponse.usernamererror.value).toEqual(
put({类型:“登录失败”,错误:“无效用户名”})
);
});
它(“传递无效密码时应返回错误”,()=>{
gen=loginSaga(badPw.creds);
gen.next();//调用api
//mockResponse.passwordError:错误(“不正确的密码”),
expect(gen.next(mockResponse.passwordError.value).toEqual(
put({类型:“登录失败”,错误:“密码不正确”})
);
});
});
测试输出(摘录)
● Saga操作›登录操作›在传递无效用户名时应返回错误
expect(received).toEqual(expected)//深度相等
-期望
+收到
反对{
“@@redux saga/IO”:正确,
“combinator”:错,
“有效载荷”:对象{
“行动”:对象{
-“错误”:“无效用户名”,
-“类型”:“登录失败”,
+“类型”:“登录成功”,
+“用户”:未定义,
},
“通道”:未定义,
},
“类型”:“放置”,
● Saga操作›登录操作›在传递无效密码时应返回错误
expect(received).toEqual(expected)//深度相等
-期望
+收到
反对{
“@@redux saga/IO”:正确,
“combinator”:错,
“有效载荷”:对象{
“行动”:对象{
-“错误”:“密码不正确”,
-“类型”:“登录失败”,
+“类型”:“登录成功”,
+“用户”:未定义,
},
“通道”:未定义,
},
“类型”:“放置”,
}
日志记录确认
loginSaga
函数在后两次测试中接收到一个
错误。我无法确定为什么没有捕获到该错误。

最终得到了它

所以,您需要让生成器认为发生异常的原因是它的
收益率之一

因此,下一个代码应该按预期工作:

it("should return an error when passed an invalid username", () => {
  gen = loginSaga(badUser.creds);
  gen.next(); // call api
  // mockReponse.usernameError: Error("Invalid Username")
  expect(gen.throw(mockResponse.usernameError).value).toEqual(
    put({ type: "LOGIN_FAILURE", error: "Invalid Username" })
  );
});