Error: No Provider for Store! in @ngrx 4.x

Error: No Provider for Store! in @ngrx 4.x

将我的项目从@ngrx 2.x 迁移到 4.1.0 时,我遇到了错误消息

NullInjectorError: No provider for Store!

商店已导入,如 docs 所示:

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

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

原来我的一些服务通过

导入了商店
import { Store } from '@ngrx/store/src/store'

将导入更改为

import { Store } from '@ngrx/store'

解决了问题。

我在 angular 7 中尝试 运行 测试时得到了这个。

我的解决方案是:

  1. describe:
  2. 的正文中定义一个商店模拟
let storeMock;
  1. beforeEach 部分初始化它:
  beforeEach(async () => {
    storeMock = {
      dispatch: jasmine.createSpy("dispatch"),
      pipe: jasmine.createSpy("pipe").and.returnValue(from([{
...
        requestTimeout: 5000,
...
      }]))
    };
  1. TestBed.configureTestingModule 中的商店定义提供商:
    TestBed.configureTestingModule({
      imports: [
        HttpClientTestingModule,
      ],
      providers: [
        ...
        {
          provide: Store,
          useValue: storeMock
        }
        ...
      ]
    });
    ```

对于 ngrx 8 使用:

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