首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jest和jasmine-marble测试ngrx效果时出现的问题

使用jest和jasmine-marble测试ngrx效果时出现的问题
EN

Stack Overflow用户
提问于 2018-08-31 19:27:40
回答 1查看 879关注 0票数 1

我正在使用jestjasmine-marbles来测试我的ngrx-effects。到目前为止还不错,但是我有一个特殊的情况,我需要使用withLatestFrom在如下的效果中访问Store

代码语言:javascript
复制
@Effect()
createDataSourceSuccess$ = this.actions$
  .ofType<sourceActions.CreateDataSourceSuccess>(
    sourceActions.DataSourceActionTypes.CreateDataSourceSuccess
  )
  .pipe(
    map(action => action.dataSource),
    withLatestFrom(this.store.select(getSourceUploadProgress)),
    switchMap(([source, progress]: [DataSource, UploadProgress]) =>
     of(
        new sourceActions.StartSourceUploadProgress({
          id: source.fileId,
          uploadProgress: progress,
        })
      )
    )
  );

我也像这样设置了我的测试:

代码语言:javascript
复制
it('should return StartSourceUploadProgress for CreateDataSourceSuccess', () => {
  const dataSource = dataSources[0];
  const action = new dataSourceActions.CreateDataSourceSuccess(dataSource);
  const outcome = new dataSourceActions.StartSourceUploadProgress({
    id: dataSource.fileId,
    uploadProgress: null,
  });

  store.select = jest.fn(_selector => of(null));

  actions.stream = hot('-a-', { a: action });
  const expected = cold('--b', { b: outcome });

  expect(effects.createDataSourceSuccess$).toBeObservable(expected);
});

我还注意到,我成功地为StoreActions设置了模拟,因为所有其他测试都工作得很好。与其他效果之间的唯一区别是,这些效果中不存在StorewithLatestFrom

最后,这是我得到的错误输出:

代码语言:javascript
复制
 DataSourceEffects › should return StartSourceUploadProgress for CreateDataSourceSuccess

    TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-31 20:46:23

这个解决方案对我很有效

代码语言:javascript
复制
it('should return StartSourceUploadProgress for CreateDataSourceSuccess', () => {
  const dataSource = dataSources[0];
  const action = new dataSourceActions.CreateDataSourceSuccess(dataSource);
  const outcome = new dataSourceActions.StartSourceUploadProgress({
    id: dataSource.fileId,
    uploadProgress: null,
  });

  actions.stream = hot('-a-', { a: action });
  const expected = cold('--b', { b: outcome });

  store.select = jest.fn().mockImplementationOnce(() => of(new SourceUploadProgress()));

  expect(effects.createDataSourceSuccess$).toBeObservable(expected);
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52114492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档