抛出错误时,Angular/Karma/Jasmine单元测试会自动失败
我对角度拦截器拦截方法进行了Karma/Jasmine单元测试,该方法返回rxjs Observable。若成功回调中出现错误,单元测试将显示为已通过,即使它应该失败。代码: 试验方法:抛出错误时,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); } 我可以通过在我的错
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');
});