Я написал тест для следующего метода:
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
.
Я прочитал документацию Rx JS и нашел проблему, но не смог выяснить, что мне нужно сделать, чтобы пройти тест. Любая помощь, чтобы указать, где я сделал ошибку, будет высоко оценена.