2017-10-11 2 views
1

Dans l'un de mes tests unitaires, j'essaie de simuler @ ngrx/store. Je l'ai utilisé la technique avec succès dans un autre fichier de spécification, mais en essayant de l'utiliser dans celui-ci, je reçois une erreur d'injection en disant No provider for Store! Voici le code correspondant à partir du fichier de spécification:Angular - Karma - ngrx - Aucun fournisseur pour 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'); 
}); 

La seule La différence entre ce composant et celui qui utilise avec succès la classe MockStore est que ce composant est paresseux chargé dans son propre module séparé de AppModule. Cependant, j'ai essayé d'importer StoreModule dans ce module ainsi que d'inclure StoreModule dans les importations TestBed, à la fois en vain.

Répondre

1

Il s'avère que mon problème était que je cite Store dans l'appel fixture.debugElement.injector.get('Store'). Suppression des citations a corrigé mon problème.

0

Vous devez ajouter

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

Cela pourrait vous aider à