設定:
次のように定義された親状態があります
@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 のバグですか?