gpt4 book ai didi

抛出错误时,Angular/Karma/Jasmine 单元测试静默失败

转载 作者:行者123 更新时间:2023-12-05 06:27:54 26 4
gpt4 key购买 nike

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

待测方法:

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),这可以通过执行日志的顺序(之前、之中、之后)来确认。

最佳答案

似乎 RxJS 捕获了订阅者抛出的错误并在下一个 tick 中重新抛出。

关于抛出错误时,Angular/Karma/Jasmine 单元测试静默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54887018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com