На основе официальных документов для оператора first
:
Если вызывается без аргументов, сначала генерируется первое значение исходного Observable, а затем завершается.
Итак, когда ваша ob
наблюдаемая излучает первое значение, поток немедленно завершается.Из журнала ошибок, который вы напечатали здесь, вы можете видеть, что полученный массив содержит два объекта.Они оба испускаются в одном и том же кадре (0
), а второй имеет notification.kind
значение C
, что означает, что это C
полное событие.
Итак, вы должныожидаемые шарики, как это: '(b|)'
.
Единственное, что меня беспокоит, это то, что выходные значения не совпадают.Основываясь на двух cold
наблюдаемых вами, вы излучаете true
в source
наблюдаемой.Когда вы звоните mapFirstToStr(source)
, он поступает через оператора first
, а затем через switchMap
.Функция стрелки в switchMap
возвращает наблюдаемое со значением, основанным на условии в троичном операторе.Поскольку полученное значение равно true
, троичное условие val ? 'A' : 'B'
возвращает 'A'
.Таким образом, значение в expected
observable может быть не 'B'
(что является значением из журналов ошибок), но 'A'
.
Итак, вы либо выдаете первое значение false
:
const source = cold('a', { a: false });
const expected = cold('(b|)', { b: 'B' });
expect(mapFirstToStr(source)).toBeObservable(expected);
Или вы ожидаете 'A'
:
const source = cold('a', { a: true });
const expected = cold('(b|)', { b: 'A' });
expect(mapFirstToStr(source)).toBeObservable(expected);