Тестирование состояний NGXS с вложенными состояниями передает неправильное состояние в обработчик действий - PullRequest
0 голосов
/ 21 ноября 2018

Настройка:

У меня родительское состояние определено как

@State<ParentStateModel>({
  name: 'grid',
  defaults: {
    parentData: 'some data'
  },
  children: [LoadingState]
})
export class ParentState {
  @Action(Action1)
  action1(ctx: stateContext<ParentStateModel>, action: Action1) {
    // In production this state will be ParentStateModel as expected
    // but in unit test, it will be of type LoadingState 
    const state = ctx.getState();
  }
}

И дочернее состояние определено как

@State<LoadingStateModel>({
  name: 'gridLoading',
  defaults: {
    loading: false
  }
})
export class LoadingState{
  @Action(Action1)
  action1(ctx: stateContext<LoadingStateModel>, action: Action1) {
    ctx.setState({loading: true});
  }
}

Обратите внимание, что оба состояния отвечают на Action1.

При запуске в работе все работает как надо.Состояние загрузки заботится о LoadingStateModel, а ParentState заботится о ParentStateModel.

Но при модульном тестировании кода обработчик действий в ParentState получает загружаемую модель вместо ParentStateModel (см. Комментарий в коде).

Мой модульный тест настроен следующим образом

TestBed.configureTestingModule({
  imports: [NgxsModule.forRoot([CashflowState, LoadingState])]
});

Если я не включаю LoadingState в массив импорта, NGXS завершается с ошибкой Child state not found: function LoadingState()

Я что-то не так делаюили это ошибка в NGXS?

...