Mocking @ ngrx / router-store's selectRouteParam - PullRequest
0 голосов
/ 15 октября 2019

У меня есть приложение Angular 8 (ядро 8.1.2), использующее NgRx и @ngrx/router-store (8.4.0), но у меня возникают проблемы с имитацией селектора, сгенерированного 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. К сожалению, техника , описанная в документах , не работает для селекторов, генерируемых @ngrx/router-store.

Есть идеи, как мне это сделать?

1 Ответ

0 голосов
/ 17 октября 2019

Я не нашел ответа на свой вопрос, но я нашел обходной путь. Я завернул селектор маршрутизатора в вызове createSelector() и только что возвратил его. Это выглядит так:

export const innerSelectRoutePageIndex = selectRouteParam('pageIndex');

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

Таким образом, код клиента все еще использует селектор selectRoutePageIndex, и MockStore.overrideSelector() доволен расположением. Кажется, что createSelector() является более щадящим для подписей селекторов, которым оно передается.

...