ユニットテストの1つで、@ ngrx/storeをモックしようとしています。この手法を別のスペックファイルで正常に使用しましたが、これを使用しようとすると、No provider for Store!
というインジェクションエラーが発生します。以下はスペックファイルの関連コードです。
beforeEach(async(() => {
const emptyState = { opportunities: { list: { items: [], page: 1, total: 0 } } };
const mockStore = new MockStore<MockAppState>(emptyState);
TestBed.configureTestingModule({
declarations: [
OpportunityListComponent,
FilledArrayPipe
],
imports: [
NgFilterListModule,
FormsModule
],
providers: [
{ provide: OpportunityApi, useValue: apiStub },
{ provide: Store, useValue: mockStore },
{ provide: Router, useValue: routerStub }
]
}).compileComponents();
}));
beforeEach(() => {
store = fixture.debugElement.injector.get('Store');
});
このコンポーネントとMockStoreクラスを正常に使用するコンポーネントの唯一の違いは、このコンポーネントがAppModuleとは別の独自のモジュールに遅延ロードされることです。ただし、そのモジュールにStoreModuleをインポートし、TestBedインポートにStoreModuleを含めようとしましたが、どちらも役に立ちませんでした。
私の問題は、fixture.debugElement.injector.get('Store')
呼び出しでStore
を引用することでした。引用符を削除すると、問題が解決しました。
追加する必要があります
imports: [
...,
StoreModule.forRoot(fromRoot.reducers),
],
それはあなたを助けるかもしれません