测试服务从 http.get 返回错误

问题描述 投票:0回答:1

我有这项服务:

@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
部分结束,如果有人能向我解释我做错了什么,我将不胜感激。

angular jasmine
1个回答
1
投票

您应该使用 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
创建一个成功的可观察对象并发出一个值。

© www.soinside.com 2019 - 2024. All rights reserved.