我有这项服务:
@Injectable({providedIn: 'root'})
export class CaseManagementService {
constructor(private http: HttpService) {
}
getDocumentDetails(caseId: string, docId: string): Observable<DocumentDetails> {
return this.http.get<DocumentDetails>(UrlConstants.CASES_URL + `/${caseId}/Documents/${docId}/Details`);
}
}
出于测试目的,我创建了以下茉莉花测试:
it('should handle error when retrieving document details', () => {
const errorResponse = new HttpErrorResponse({ error: 'error', status: 500 });
spyOn(service['http'], 'get').and.returnValue(of(errorResponse));
service.getDocumentDetails('case1', 'doc1').subscribe({
next: () => fail('expected an error, not document details'),
error: error => expect(error.message).toContain('error')
});
expect(service['http'].get).toHaveBeenCalledWith(UrlConstants.CASES_URL + '/case1/Documents/doc1/Details');
});
无论我做什么,我都会以我的
next
的subscribe
部分结束,如果有人能向我解释我做错了什么,我将不胜感激。
您应该使用 throwError 而不是
of
。
import { throwError } from 'rxjs';
it('should handle error when retrieving document details', () => {
const errorResponse = new HttpErrorResponse({ error: 'error', status: 500 });
spyOn(service['http'], 'get').and.returnValue(throwError(() => errorResponse));
service.getDocumentDetails('case1', 'doc1').subscribe({
next: () => fail('expected an error, not document details'),
error: error => expect(error.message).toContain('error')
});
expect(service['http'].get).toHaveBeenCalledWith(UrlConstants.CASES_URL + '/case1/Documents/doc1/Details');
});
HttpErrorResponse
本身不会抛出错误,并且 of
创建一个成功的可观察对象并发出一个值。