Написание модульного теста, чтобы убедиться, что возникает ошибка, когда какое-либо свойство типа не соответствует регистру в операторе switch. Бросок находится внутри функции, которая выполняет цепочку flatMaps и заканчивается подпиской.
Try / catch не заканчивает тем, что перехватывает что-либо, вызванное вызванной функцией, хотя возникает правильная ошибка, которую я вижу, когда добавляю обратный вызов при ошибке в конце подписки.
В настоящее время я использую блок try / catch, чтобы поймать бросок, однако я также попытался использовать цепочку expect(() => {}).toThrow()
безуспешно.
Я также попытался использовать throwError()
вместо throw new Error()
it('should handle unknown list creation', async(() => {
let service = new BlaService(...);
let ids = ['1', '2', '3', '4', '5'];
let listType = 'dfklsjfdkls';
try {
service.handleCreateList(Observable.of({ ids: ids, listType: listType }));
expect(true).toBe('expected exception to be thrown');
} catch (ex) {
expect(ex).toBe(listType + ' is not a recognized list type');
}
// expect( function () {
// service.handleCreateList(Observable.of({ ids: ids, listType: listType }));
// }
// ).toThrow(new Error(listType + ' is not a recognized list type'));
}));
public handleCreateList(contextObservable: Observable<any>): void {
// a bunch of lets here
contextObservable.flatMap((context) => {
ids = context.ids;
switch (context.listType) {
case 'constituent':
idsetType = 0;
break;
case ...
break;
default:
// this is the throw we are testing
throw new Error(context.listType + ' is not a recognized list type');
}
return this.resources.getString(context.listType + '_list_name');
}).flatMap((title: string) => {
...
return url;
}).flatMap((url: string) => {
...
return requestResponse;
}).flatMap((response) => {
... // generate a list of observables
return forkJoin(observables);
}).subscribe(() => {
...
// does some navigation stuff here
});
}