Как проверить, что внутри функции flatMap возникла ошибка? - PullRequest
0 голосов
/ 04 октября 2019

Написание модульного теста, чтобы убедиться, что возникает ошибка, когда какое-либо свойство типа не соответствует регистру в операторе 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
        });
    }

1 Ответ

0 голосов
/ 10 октября 2019

Исправлено путем подписки на вывод of(), используемый в качестве ввода и использования его обратного вызова с ошибкой. Также реальная функция, которую нужно вернуть, и вместо подписки она должна передать и нажать.

...