使用子状态测试NGXS状态会将错误的状态输入动作处理程序

时间:2018-11-21 11:58:09

标签: ngxs

设置:

我的父状态定义为

@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中的操作处理程序将被提供给LoadingStateModel而不是ParentStateModel(请参见代码中的注释)。

我的单元测试设置如下

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

如果我未在imports数组中包含LoadingState,则NGXS失败,并显示Child state not found: function LoadingState()

我是在做错什么,还是NGXS中的错误?

0 个答案:

没有答案