【问题标题】:How to trigger error and test the method?如何触发错误并测试方法?
【发布时间】:2020-07-03 23:29:57
【问题描述】:

我正在做角度服务测试。它工作正常。但是我无法实现100%的测试,因为错误功能没有测试。我已经尽力了。但无法拿出 100%。有人帮帮我吗?

这是我的服务:

export class CandidateRegistrationManagementService {

    constructor(private http: HttpClient) { }

    getAvailabilityType(): Observable<ModelAvailabilityType> {
        return this.http.get<ModelAvailabilityType>(environment.setUpAndConfigUrl + `LookupTypeValue/LookupValueTypeDetails?LookupTypeName=AvailabilityType`)
            .pipe(
                map(events => {
                    return events;
                }),
                catchError(this.handleError)
            );
    }
    
    handleError(error: Response) {
        return throwError(error);
    }
}

我的测试用例目前我已经覆盖了 75%。错误测试的问题。这是我的尝试:

it('should throw error', () => {

        const httpError = {
            get: jest.fn(() => of(hot('#', {}, new Error('server error'))))
        };

        function handleError(error:any) {
            return throwError(error);
        }

        CRMService = new CandidateRegistrationManagementService(httpError as any);
        CRMService.getAvailabilityType().subscribe(data =>data, (error:any) => {
            catchError(handleError(error))
        })

    })

但我的尝试不起作用。我没有得到 100% 的覆盖率。请在这里寻求帮助。

【问题讨论】:

  • 你试过angular.io/guide/http#testing-for-errors吗?但请注意,catchError((err) =&gt; throwError(err)) 实际上是一个空操作,一开始就抓住它是没有意义的。
  • @jonrsharpe - 但我无法获得 100% 的覆盖率,直到我完成错误的测试。
  • 如果您删除了多余的错误路径,您可以在不编写错误测试的情况下提高覆盖率。不过,如果您确实想测试错误案例,您是否尝试过使用 Angular 提供的用于测试 HTTP 服务的工具?
  • @jonrsharpe - 我同意你的看法。让我尝试角度推荐。但问题是我将 jest.js 与 jasmine-marbles 一起使用。希望以同样的方式修复。

标签: angular unit-testing jestjs jasmine-marbles


【解决方案1】:

尝试使用 --throwError rxjs 操作符,throwError 会执行你代码的错误块。

   const httpError = {
            get: jest.fn(() => throwError(new Error('server error'))
        };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多