web-dev-qa-db-fra.com

Erreur: aucun fournisseur pour le magasin! dans @ngrx 4.x

Lors de la migration de mon projet de @ngrx 2.x vers 4.1.0, j'ai rencontré le message d'erreur

NullInjectorError: aucun fournisseur pour Store!

Le magasin a été importé comme indiqué dans le docs :

import { StoreModule as NgRxStoreModule } from '@ngrx/store';

@NgModule({
  imports: [
    NgRxStoreModule.forRoot(reducerMap, {
      initialState: initial
    }),
    StoreRouterConnectingModule,
    EffectsModule.forRoot(effects)
  ],
  providers: [AppActions]
})
export class StoreModule {}
9

Il s'est avéré que certains de mes services ont importé le magasin via

import { Store } from '@ngrx/store/src/store'

Modification des importations en

import { Store } from '@ngrx/store'

résolu le problème.

10

Je l'ai obtenu alors que j'essayais d'exécuter des tests dans angular 7.

La solution pour moi était de:

  1. définir une maquette de magasin dans le corps de describe:
let storeMock;
  1. initialisez-le dans la section beforeEach:
  beforeEach(async () => {
    storeMock = {
      dispatch: jasmine.createSpy("dispatch"),
      pipe: jasmine.createSpy("pipe").and.returnValue(from([{
...
        requestTimeout: 5000,
...
      }]))
    };
  1. définir le fournisseur pour Store dans TestBed.configureTestingModule:
    TestBed.configureTestingModule({
      imports: [
        HttpClientTestingModule,
      ],
      providers: [
        ...
        {
          provide: Store,
          useValue: storeMock
        }
        ...
      ]
    });
    ```
0
uthomas

Pour l'utilisation de ngrx 8:

import { provideMockStore } from '@ngrx/store/testing';
0
Gal Margalit