用于Observable.of()的RxJS first() - 没有顺序的元素

时间:2016-11-28 16:08:39

标签: javascript angular rxjs ngrx

对于我的测试,我试图使用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()时才会出现这种情况。

如何模拟事件流,以便测试不会失败?

2 个答案:

答案 0 :(得分:17)

首先会发出一个项目或抛出错误,因此在空的observable上调用.first()会导致错误。所以这是预期的行为。

如果您想从observable中获取最多一个项目,请使用.take(1)

答案 1 :(得分:8)

first()的文档说:

  

如果Observable在发送下一个通知之前完成,则向Observer的错误回调发送一个EmptyError。

因此,错误发生是因为您的测试数据未通过filter()运算符并立即发出完整。