【发布时间】:2019-07-20 02:03:20
【问题描述】:
我有 Angular 拦截器拦截方法的 Karma/Jasmine 单元测试,它返回 rxjs Observable。如果成功回调单元测试有一些错误,即使它应该失败,它也会显示为通过。代码:
被测方法:
intercept(
request: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
...
return next.handle(req);
}
测试:
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');
});
我可以通过在错误回调结束时调用 done 来解决此问题,如描述 here,但我不明白为什么有必要,因为我的代码是同步执行的(由于使用 queueScheduler 的 rxjs throwError),它可以由执行日志的顺序(之前、之中、之后)来确认。
【问题讨论】:
标签: angular unit-testing jasmine rxjs angular-test