web-dev-qa-db-ja.com

Observable.of()のRxJS first()-シーケンスの要素なし

私のテストでは、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()を使用した場合にのみ発生します。

テストが失敗しないようにイベントストリームをモックするにはどうすればよいですか?

20
select

.first() は1つのアイテムを出力するか、エラーをスローします(defaultValueパラメータが指定されていない場合)。したがって、空のオブザーバブルで呼び出すとエラーが発生します。これは、ドキュメントに基づく予想される動作です。

オブザーバブルから最大1つの項目を取得する場合は、 .take(1) を使用します。

20
Tamas Hegedus

first() のドキュメントはこう言っています:

次の通知が送信される前にObservableが完了した場合は、ObserverのエラーコールバックにEmptyErrorを配信します。

したがって、テストデータがfilter()演算子を渡さず、すぐに完了を送信するため、エラーが発生します。

9
martin