Ошибка кармы: Невозможно установить свойство 'beforePreactivation' из неопределенного - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь протестировать компонент в моем приложении Angular 5, которое использует @ngrx/router-store, и у меня возникли проблемы с неопределенностью state в этом селекторе:

import * as fromRouter from '@ngrx/router-store';

export const selectRouter = (state: AppState) => state.router;

export const selectUrl = createSelector(
  selectRouter,
  (state: fromRouter.RouterReducerState<RouterStateUrl>) => state.state && state.state.url // <--- state here is undefined
);

Чтобы преодолеть этопроблема, я попытался добавить следующий импорт в мой модуль, сгенерированный TestBed:

imports: [
  RouterModule.forChild(wizardRoutes),
  StoreModule.forRoot(reducers, {metaReducers}),
  EffectsModule.forRoot([MyEffects, WizardEffects]),
  HttpClientModule,
  StoreRouterConnectingModule.forRoot() // <--- this makes it happier
]

Теперь, однако, я получаю следующую ошибку в окне браузера тестирования Karma:

TypeError: Невозможно установить свойство beforePreactivation для undefined в StoreRouterConnectingModule.webpackJsonp ../ node_modules / @ ngrx / router-store / @ ngrx / router-store.es5.js.StoreRouterConnectingModule.setUpBeforePreactivationHook (* 101 *

В официальных документах мало информации о тестировании хранилища маршрутизаторов или нет, и я не смог ничего найти в Google.

Я знаю, что не предоставил огромное количество кода, поэтому, пожалуйста,дайте мне знать, что еще нужно увидеть, и я добавлю это.

1 Ответ

0 голосов
/ 06 января 2019

Чтобы подключить Router, вам необходимо импортировать маршрутизатор через forRoot вместо forChild.

И действительно, вам нужно импортировать StoreRouterConnectingModule.forRoot, чтобы использовать маршрутизатор-редуктор NgRx.

Попробуйте использовать:

imports: [
  RouterModule.forRoot(wizardRoutes),
  StoreModule.forRoot(reducers, {metaReducers}),
  EffectsModule.forRoot([MyEffects, WizardEffects]),
  HttpClientModule,
  StoreRouterConnectingModule.forRoot()
]
...