Тестирование функции, которая объединяет Observables - PullRequest
1 голос
/ 06 января 2020

Мне поручено тестировать наблюдаемые, и я довольно новичок в этой концепции. У меня есть четкое представление о том, как работают Observables, и мне нужно протестировать функцию andCombine, которая принимает две наблюдаемые и возвращает результат AND.

  it('tests andCombine', () => {
       const coldOne = cold('t----f|', {t : true, f : false});
       const coldTwo = cold('t-f|', {t : true, f : false});
       const result = cold('t-f--f|', {t : true, f : false});
       const combined = andCombine(coldOne, coldTwo);
       expect(combined).toBeObservable(result);

    });

AndCombine выглядит как

export const andCombine = (...source$: Observable<any>[]): Observable<any> => {
    return combineLatest(source$.filter(data => !!data)).pipe(
        map(([...args]: [any[]]) => {
            return args.reduce((acc, arg) => {
                return acc && !!arg;
            }, true);
        }),
        distinctUntilChanged()
    );
};

И у меня есть следующие журналы ошибок.

   Error: Expected $.length = 3 to equal 4.
        Expected $[2].frame = 60 to equal 50.
        Expected $[2].notification.kind = 'C' to equal 'N'.
        Expected $[2].notification.value = undefined to equal false.
        Expected $[2].notification.hasValue = false to equal true.
        Expected $[3] = undefined to equal Object({ frame: 60, notification: Notification({ kind: 'C', value: undefined, error: undefined, hasValue: false }) }).

Я знаю, что чего-то очень не хватает c, и мне бы хотелось, чтобы кто-нибудь помог мне понять, как эта штука работает и где я нахожусь. идет не так

1 Ответ

2 голосов
/ 06 января 2020

Вы используете distinctUntilChanged(), поэтому второе уведомление false будет игнорироваться.

DistinctUntilChanged

Возвращает наблюдаемое, которое испускает все элементы, испускаемые источником Наблюдаемое, которое отличаются от предыдущего пункта.

т.е. false, false, false от источника приводит только к одному false для наблюдаемого выхода.

Я полагаю, что ваш тест верен, если вы проверяете:

const result = cold('t-f---|', {t : true, f : false});

... или удаляете distinctUntilChanged, в зависимости от вашего варианта использования.

Дополнительная информация

...