【问题标题】:Using catchError, throwError in Jasmine在 Jasmine 中使用 catchError、throwError
【发布时间】:2021-06-08 13:33:24
【问题描述】:

在我的 Angular 项目中,有一个带有方法的服务

import { throwError as observableThrowError, Observable } from 'rxjs';   
import { catchError } from 'rxjs/operators';

getUser(): Observable<User> {
  return <Observable<User>>this.http
  .get(`${baseUrl}/api/v1/user`)
  .pipe(
    catchError((error: any) => observableThrowError(error) )
  );
}

在单元测试中,我检查对预期 URL 的请求:

it('should have made request to getUser from expected url', () => {
  const expectedUser = { username: 'user' };

  apiService.getUser().subscribe(user => {
    expect(user).toEqual(expectedUser);
  });

  const req = httpTestingController.expectOne(`${baseUrl}/api/v1/user`);
  expect(req.request.method).toEqual('GET');
  req.flush(expectedUser);
});

..它的工作原理。 但我不知道如何检查是否有错误:

有什么想法吗?

【问题讨论】:

    标签: angular unit-testing testing jasmine karma-jasmine


    【解决方案1】:

    试试这个:

    it('should return the error', (done) => { // add done to let Jasmine know when we are done
      const mockErrorResponse = { status: 400, statusText: 'Bad request' };
      const data = 'Invalid request';
      
      apiService.getUser().subscribe(user => {
       
      }, err => {
        expect(err).toBeTruthy();
        done(); // call done to let Jasmine know we are done with our assertions
      });
      const req = httpTestingController.expectOne(`${baseUrl}/api/v1/user`);
      expect(req.request.method).toEqual('GET');
      req.flush(data, mockErrorResponse);
    });
    

    看看这个link 和这个link

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      相关资源
      最近更新 更多