在我的一个单元测试中,我正在尝试模拟@ ngrx / store。我已经在另一个spec文件中成功使用了这个技术,但是当我尝试在这个文件中使用它时,我收到一个注入错误,说No provider for Store!
下面是spec文件中的相关代码:
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,两者都无济于事。
答案 0 :(得分:4)
原来我的问题是我在Store
电话中引用了fixture.debugElement.injector.get('Store')
。删除引号修复了我的问题。
答案 1 :(得分:4)
你应该添加
imports: [
...,
StoreModule.forRoot(fromRoot.reducers),
],
这可能会对你有所帮助
答案 2 :(得分:4)
对于 NgRx 7 +,像这样使用 MockStore
:
const initialState = {};
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [LogsNewComponent],
providers: [
provideMockStore({ initialState }),
],
}).compileComponents();
}));