模拟@ ngrx /路由器存储的selectRouteParam

问题描述 投票:0回答:1

我有一个使用NgRx和@ngrx/router-store(8.4.0)的Angular 8应用程序(核心8.1.2),但是在模拟由fromRouter.getSelectors(selectRouter)生成的选择器时遇到了麻烦。

我编写并正在尝试测试的选择器看起来像这样:

export const selectFilteredPagedFeaturedPlaylists = createSelector(
  selectFilteredFeaturedPlaylists,
  selectRoutePageIndex,
  selectPageSize,
  (featuredPlaylists, pageIndex, pageSize) => ({
    ...featuredPlaylists,
    content: featuredPlaylists.content.slice(+pageIndex * pageSize, (+pageIndex + 1) * pageSize)
  })
);

selectRoutePageIndex选择器,调用商店生成的方法,看起来像这样:

export const selectRoutePageIndex = selectRouteParam('pageIndex');

实际上,我不一定要模拟selectRouteParam选择器,但是我需要模拟我的selectRoutePageIndex选择器。不幸的是,technique described in the docs似乎不适用于@ngrx/router-store生成的选择器。

任何想法我该怎么做?

angular ngrx ngrx-router-store
1个回答
0
投票

我没有找到问题的答案,但是我已经创建了一种解决方法。我已经将路由器存储的选择器包装在createSelector()调用中并返回了它。看起来像这样:

export const innerSelectRoutePageIndex = selectRouteParam('pageIndex');

export const selectRoutePageIndex = createSelector(
  innerSelectRoutePageIndex,
  (routePageIndex) => routePageIndex
);

因此,客户端代码仍然使用selectRoutePageIndex选择器,并且MockStore.overrideSelector()对这种安排感到满意。似乎createSelector()更宽容了它传递的选择器的签名。

© www.soinside.com 2019 - 2024. All rights reserved.