Настройка:
У меня родительское состояние определено как
@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?