angular - 如何在 ngrx 效果中使用 LatestFrom 进行单元测试

我有一个效果是从参数中获取最新的并将其传递到一个 exhaustMap 中,然后调用一个服务。

@Effect()
loadPlansOnParams$ = this.actions$.pipe(
 ofType(backlogActions.BacklogActionTypes.GET_BOARDS_IN_PARAMS),
 withLatestFrom(this.store.select(fromRoot.getRouterState), (action, router) => {
   const {
     state: {
       queryParams: { boards },
     },
   } = router;
   return {
     boards,
   };
 }),
 exhaustMap(payload => {
   return this.boardService.getBoardsFromParams(payload.boards).pipe(
     map((res: SignalRResult) => {
       const board = res.item;
       return new backlogActions.GetBoardsSuccess(board);
     }),
     catchError(err => of(new backlogActions.GetBoardsError(err))),
   );
 }),
);

一切都很好。但是我无法用它来测试我的生命。我能找到的几乎所有示例都是无用的。

这是我的测试...

describe('getting boards from the params', () => {
    it('should return an empty array if no params', () => {
      const params = { state: { queryParams: {} } };
      const successfulSignalRResult = { isSuccessful: true, item: [] };
      const action = new backlogActions.GetBoardsInParams();
      const outcome = new backlogActions.GetAvailableBoardsSuccess([]);
      actions.stream = hot('-a', { a: action });
      store.select = jest.fn(() => of(params));
      expected = cold('--b', { b: outcome });
      boardSvc.getBoardsFromParams = jest.fn(() => successfulSignalRResult);
      expect(effects.loadPlansOnParams$).toBeObservable({});
    });
  });

无论我对 store.select 模拟做什么,我都会返回“您在需要流的位置提供了‘undefined’。”

感谢任何帮助。我真的希望我在弹珠上遗漏了一些东西。

最佳答案

也许,这是迟到的答案。我遇到了同样的问题。

我不知 Prop 体原因。在我看来,同时使用MockStore和effect时,getRouterState并没有初始化。在构造函数中初始化 loadPlansOnParams$ 时,getRouterState 未正确初始化。

简单来说,getRouterState 的初始化像这样位于 loadPlansOnParams$ 之前。

@Effect()

SomeVariableForGetRouterState:Observable<SomeThing> = ..... fromRoot.getRouterState ..... like this.. 

loadPlansOnParams$ = this.actions$.pipe(
ofType(backlogActions.BacklogActionTypes.GET_BOARDS_IN_PARAMS),
withLatestFrom( SomeVariableForGetRouterState, (action, router) => {
.....
);

https://stackoverflow.com/questions/54444157/

相关文章:

python-3.x - celery 错误 : result. get(timeout=5) 超时

typo3 - 使用流体创建数组和对象 f :variable

sql - AWS Redshift 身份列插入 - 新记录的身份值不大于以前的最大身份值

terminal - 转义码 VT102 和 ANSI

ruby-on-rails - rake 数据库 :setup is giving Library

python - 如何在 django 中使用 ajax 形式验证 django-recaptcha

javascript - 为什么 Chrome 在使用 Typed.js 时难以呈现表情符号?

amazon-ec2 - HAProxy - 基于 URL/路径路由到后端 IP?

python - 如何在 Mac 上将 Python 完全恢复为出厂设置

Python:DataFrame.melt - 如何选择一系列列作为标识符变量?