我怎样才能抑制 Api 错误和 return 一个值呢?
How can i supress Api error and return a value instead?
我从 API 收到未使用的 404
和已用电子邮件的 204。现在我想使用 rxjs
/pipe
和 catchError
.
将其转换为 boolean
(true/false)
emailAvailable(): Observable<boolean> {
return this.api.email(email).pipe(
map((response: HttpResponse<any>) => {
return false; // used email > false
}),
catchError((err: HttpErrorResponse) => {
if (err.status === 404) {
return of(true); // unused > true
}
throw err;
})
);
}
现在在我的单元测试中,我遇到了这样定义的未使用电子邮件的情况
when(mockApi.email('unused@example.com')).thenThrow(
new HttpErrorResponse({status: 404, statusText: 'E-Mail not in use', error: { message: 'E-Mail not in use'}}));
然后它尝试像这样编写我的测试。
it('should validate for unused email', async() => {
expect(await readFirst(emailService.emailAvailable('unused@example.com'))).toBe(true);
});
现在测试失败了,因为抛出 HttpErrorResponse
:
● EmailValidator › should validate form for unused email
HttpErrorResponse: Http failure response for (unknown url): 404 E-Mail not in use
所以 Observable
抛出了我认为我用 catchError
发现的错误。
我的测试设置是 jest
,我不想(也不能)切换到 TestBed。
对我有帮助的是这个Post:
“抛出错误”路径应该 return 错误在“of”中,这样它也可以测试。
模拟可以这样结束:
when(mockApi.email('unused@example.com')).thenReturn(
throwError(new HttpErrorResponse(
{ status: 404, statusText: 'E-Mail not in use', error: { message: 'E-Mail not in use'} }
)));
在该测试中,您可以检查您的值或错误消息
我从 API 收到未使用的 404
和已用电子邮件的 204。现在我想使用 rxjs
/pipe
和 catchError
.
boolean
(true/false)
emailAvailable(): Observable<boolean> {
return this.api.email(email).pipe(
map((response: HttpResponse<any>) => {
return false; // used email > false
}),
catchError((err: HttpErrorResponse) => {
if (err.status === 404) {
return of(true); // unused > true
}
throw err;
})
);
}
现在在我的单元测试中,我遇到了这样定义的未使用电子邮件的情况
when(mockApi.email('unused@example.com')).thenThrow(
new HttpErrorResponse({status: 404, statusText: 'E-Mail not in use', error: { message: 'E-Mail not in use'}}));
然后它尝试像这样编写我的测试。
it('should validate for unused email', async() => {
expect(await readFirst(emailService.emailAvailable('unused@example.com'))).toBe(true);
});
现在测试失败了,因为抛出 HttpErrorResponse
:
● EmailValidator › should validate form for unused email
HttpErrorResponse: Http failure response for (unknown url): 404 E-Mail not in use
所以 Observable
抛出了我认为我用 catchError
发现的错误。
我的测试设置是 jest
,我不想(也不能)切换到 TestBed。
对我有帮助的是这个Post:
“抛出错误”路径应该 return 错误在“of”中,这样它也可以测试。
模拟可以这样结束:
when(mockApi.email('unused@example.com')).thenReturn(
throwError(new HttpErrorResponse(
{ status: 404, statusText: 'E-Mail not in use', error: { message: 'E-Mail not in use'} }
)));
在该测试中,您可以检查您的值或错误消息