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().

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


person select    schedule 28.11.2016    source источник


Ответы (2)


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

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

person Tamas Hegedus    schedule 28.11.2016

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

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

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

person martin    schedule 28.11.2016
comment
Спасибо за этот превосходный ответ, было действительно трудно решить, кому дать положительный ответ. Пока вы объясняли мне, почему я увидел ошибку и что я сделал не так, Тамас дал мне решение для ее исправления. - person select; 30.11.2016