抛出错误时,Angular/Karma/Jasmine单元测试会自动失败

抛出错误时,Angular/Karma/Jasmine单元测试会自动失败,angular,unit-testing,jasmine,rxjs,angular-test,Angular,Unit Testing,Jasmine,Rxjs,Angular Test,我对角度拦截器拦截方法进行了Karma/Jasmine单元测试,该方法返回rxjs Observable。若成功回调中出现错误,单元测试将显示为已通过,即使它应该失败。代码: 试验方法: intercept( request: HttpRequest<any>, next: HttpHandler ): Observable<HttpEvent<any>> { ... return next.handle(req); } 我可以通过在我的错

我对角度拦截器拦截方法进行了Karma/Jasmine单元测试,该方法返回rxjs Observable。若成功回调中出现错误,单元测试将显示为已通过,即使它应该失败。代码:

试验方法:

intercept(
  request: HttpRequest<any>,
  next: HttpHandler
): Observable<HttpEvent<any>> {
  ...

  return next.handle(req);
}

我可以通过在我的错误回调结束时调用done来解决这个问题,但我不明白为什么有必要这样做,因为我的代码是同步执行的(由于使用queueScheduler的rxjs throwerr),这可以通过日志执行的顺序(之前、中、之后)来确认
it("some test desc", () => {
  const headers = ...
  const request = new HttpRequest('GET', '/test', '', { headers });

  const next = jasmine.createSpyObj('HttpHandler', ['handle']);
  const errorResponse = new HttpErrorResponse({
    status: 401,
    error: 'SOME_ERROR_CODE'
  });

  next.handle.and.returnValue(throwError(errorResponse));

  console.log('before');
  interceptor.intercept(request, next).subscribe(
    () => fail('Observable should resolve with error.'),
    (res: HttpErrorResponse) => {
      console.log('in');
      throw new Error('some error happened here');
      expect(res).toBe(errorResponse);
    }
  );

  console.log('after');
});