Jestjs 生成器未捕获来自API调用的错误
我使用的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.
不正确的\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" })
);
});