2017-10-11 128 views
1

在我的一个单元测试中,我试图嘲笑@ ngrx/store。我已经成功地使用该技术在其他规范文件,但试图在这一一个使用它的时候,我发现了一个注射错误说No provider for Store!下面是从规范文件中的相关代码:Angular - Karma - ngrx - 没有店铺提供商

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,但都无济于事。

回答

1

原来我的问题是我在fixture.debugElement.injector.get('Store')调用中引用了Store。删除引号解决了我的问题。

0

您应该添加

imports: [ 
    ..., 
StoreModule.forRoot(fromRoot.reducers), 
], 

这可能会帮助你