rxjs - 茉莉花测试期间出现意外错误(可观察到)
问题描述
我为以下方法编写了一个测试:
private _segmentationStatus$: Subject<string> = new Subject();
public readonly segmentationStatus: Observable<string> = this._segmentationStatus$.asObservable();
/**
* Get the status from the segmentation service.
*/
public getStatus() {
const segmentationId: string = this._segmentationIdService.segmentationId;
const segmentationStatusUrl = `${this.getSegmentationStatusUrl}/${segmentationId}/status`;
this._http
.get(segmentationStatusUrl, { responseType: 'text' })
.subscribe({
next: () => {
this._loggerService.trackTrace(`Segmentation status: ${status}`, LogSeverity.Verbose);
this._segmentationStatus$.next(status);
},
error: (error) => {
this._messageService.emitMessage(new Message(MessageCode.ErrorGetStatus, error));
this._loggerService.trackException(error);
this._segmentationStatus$.error(error);
}
});
}
为了测试我开始编写测试的方法,如下所示:
fit('should emit a message if the request failed', done => {
let messageReceived: Message;
spyOn((service as any)._messageService, 'emitMessage').and.callFake(message => {
messageReceived = message;
});
service.segmentationStatus.subscribe({
error: () => {
expect(messageReceived.messageCode).toBe(MessageCode.ErrorGetStatus);
done();
}
});
spyOnProperty(
(service as any)._segmentationIdService,
'segmentationId',
'get'
).and.returnValue('id');
service.getStatus();
httpTestingController
.expectOne(`${service.getSegmentationStatusUrl}/id/status`)
.flush('{}', { status: 500, statusText: 'status' });
});
如果我使用调试器,程序和测试的流程是符合预期的。我看到发出的消息,并且调用了单元测试中的错误处理程序。但是,在单元测试中的错误处理程序完成this._segmentationStatus$.error(error);
生产代码中的行后,会引发另一个错误,该错误未得到处理。因此,测试失败并显示消息Uncaught [object Object] thrown
。
我已经阅读了 RxJS 文档并搜索了问题,但无法弄清楚我需要做什么才能通过测试。任何帮助指出我在哪里犯了错误将不胜感激。
解决方案
我发现了问题;有另一个未处理错误的 segmentationStatus 订阅者。由于没有人“捕获”异常,因此它冒泡并被重新抛出。正如在主题主题(在 RxJS 中)中所解释的那样。
推荐阅读
- multithreading - 在 Gridpane 中的 Canvas 选择工具中绘图
- django - 在 GenericForeignKey 中强制执行模型限制
- android - GCM:又一个 BIND_JOB_SERVICE 权限错误——IntentService 到 JobIntentService
- javascript - mustache-express - 为 mustache 创建一个局部子目录
- angular - 当我刷新页面时,我得到两个响应
- python - Python MSS - 使屏幕截图文件大小更小还是 jpg?
- ansible - 来自文件的ansible列表作为变量
- c# - 运行 MS ACCESS 宏的 C# 互操作错误
- android - 无法使用 Firebase 数据填充 RecyclerView 适配器
- javascript - 带有下拉列表的 Node JS 交互式图库