У меня есть функция, которая добавляет операторы к наблюдаемому, возвращаемому диспетчером команд. Я добавил catchError
, который преобразует обнаруженную ошибку в один из моих типов ошибок. Наблюдаемый источник подписывается внутри функции и не виден снаружи. Функциональность работает нормально, но у меня возникли проблемы с написанием модульных тестов для этого, поскольку код внутри функции является asyn c, но выполнение кода asyn c не видно за пределами области действия функции.
doStuff() {
commandService.dispatch( 'MyCommand', { data: data }).pipe(
catchError( error => throwError( new MyError())),
last(),
tap( resultData => {
processResultData( resultData );
}),
).subscribe();
}
Ниже приведен написанный мной модульный тест.
it( 'should not call processResult if error', async done => {
const error = { code: 1608, message: 'error', name: 'error' };
spyOn( commandService, 'dispatch' ).and.returnValue( throwError( error ));
spyOn( myObject, 'processResult' ).and.returnValue( of({}));
myObject.doStuff();
expect(() => myObject.processResult ).not.toHaveBeenCalled();
});
Этот тест завершился неудачно, поскольку ошибка, выданная throwError
внутри catchError
, не была обработана. Жалобы на то, что произошла непредвиденная ошибка. Я пробовал несколько способов отловить ошибку, но безуспешно. Есть ли способ поймать возникшую ошибку, не подвергая наблюдаемое извне функции?