2017-10-11 131 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), 
], 

這可能會幫助你