jum*_*der 5 karma-jasmine ngrx angular
在我的一项单元测试中,我正在尝试模拟@ 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');
});
Run Code Online (Sandbox Code Playgroud)
该组件与成功使用MockStore类的组件之间的唯一区别是,此组件是延迟加载到与AppModule分开的其自己的模块中的。但是,我尝试在该模块中导入StoreModule以及在TestBed导入中包括StoreModule,但均无济于事。
小智 5
您应该添加
imports: [
...,
StoreModule.forRoot(fromRoot.reducers),
],
Run Code Online (Sandbox Code Playgroud)
那可能对你有帮助
小智 5
对于 NgRx 7 +,使用MockStore如下所示:
const initialState = {};
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [LogsNewComponent],
providers: [
provideMockStore({ initialState }),
],
}).compileComponents();
}));Run Code Online (Sandbox Code Playgroud)