簡體   English   中英

angular service中catcherror管道功能的單元測試

[英]Unit testing of catcherror pipe function in angular service

我嘗試了解如何測試此功能。 (err)=>{ line,它顯示為未覆蓋的語句。 服務.ts

Deletevote(inp) {
   console.log(inp);
     
   return this.http.post(environment.apiUrl + '/api/reset/abc', inp).pipe(
      catchError((err) => {
         console.log('error caught in service');
         console.error(err);
         return throwError(err);
      })
   );
}

我已經為正流創建了這個測試用例,但仍然沒有涵蓋 err 部分。 請指導我如何創建錯誤。

服務規范

const Mockcolor = 'green';
const MockGen = 'male';

it('submitnominGreen', () => {
    service.Deletevote(DeleteObj).subscribe((posts) =>{
      expect(posts).toEqual([Mockcolor,MockGen], 'should check mock data');
    });
    const req =  httpTestCtrl.expectOne(environment.apiUrl + '/api/reset/abc');
    expect(req.request.method).toBe('POST');
    expect(req.cancelled).toBeFalsy();
    req.flush([Mockcolor,MockGen])
});

首先,單元測試subscribe里面的代碼不會被執行。 Karma 將等待所有同步執行完成,並在執行異步回調之前認為測試已完成。 作為解決方案,您可以使用done回調來指示何時手動完成測試。

您在利用 HttpTestingModule 進行測試方面做得很好。 它也允許您輕松測試錯誤。 您可以使用req.error方法來模擬 HTTP 錯誤,而不是req.flush

it('submitnominGreen', (done) => {
    const mockError = {error: 'someError'} as ErrorEvent;
    service.Deletevote(DeleteObj).subscribe(() => {}, (thrownError) =>{
      expect(thrownError.error).toEqual(mockError);
      done();
    });
    const req =  httpTestCtrl.expectOne(environment.apiUrl + '/api/reset/abc');
    req.error(mockError);
});

看看這篇不錯的文章的Error handling部分: 測試 Angular HTTP 通信 這對其他一些場景也有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM