Подтвердить что ты не робот

RxJS first() для Observable.of() - нет элементов в последовательности

Для моих тестов я пытаюсь высмеять поток событий с помощью Observable.of(), но когда я попробую

const actions$ = Observable.of({});
...
// in the function that is tested
actions$
  .filter(action => action.type === 'LOAD_REQUEST') 
  .first()
  .subscribe(() => { ... do something });

Я получаю следующую ошибку

EmptyError: без элементов в xxx.js

Это происходит только тогда, когда я использую .first().

Как я могу издеваться над потоком событий, чтобы тесты не терпели неудачу?

4b9b3361

Ответ 1

.first() испустит ровно один элемент или выдаст ошибку (если не defaultValue параметр defaultValue), поэтому вызов его для пустой наблюдаемой приведет к ошибке. Это ожидаемое поведение, основанное на документации.

Если вы хотите получить не более одного предмета из наблюдаемого, используйте .take(1).

Ответ 2

Документация для first() говорит:

Посылает EmptyError для обратного вызова ошибки Observer, если Observable завершается до отправки следующего уведомления.

Таким образом, ошибка возникает из-за того, что ваши тестовые данные не передают оператор filter() и немедленно испускают.