1

設定:

次のように定義された親状態があります

@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 ではなく LoadingStateModel が渡されます (コード内のコメントを参照)。

私の単体テストは次のように設定されています

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

imports 配列に LoadingState を含めないと、NGXS は次のエラーで失敗しますChild state not found: function LoadingState()

何か間違ったことをしていますか、それとも NGXS のバグですか?

4

0 に答える 0