代码之家  ›  专栏  ›  技术社区  ›  J-man

为什么我得到“没有提供还原管理器!“ngrx延迟加载角6应用程序单元测试错误?

  •  0
  • J-man  · 技术社区  · 6 年前

    我有一个 延迟加载 使用的Angular 6应用程序 ngrx公司 . 我有一个:

    app.module.ts
    shared.module.ts
    core.module.ts
    

    核心模块包括页脚和页眉。这里没有与store/ngrx相关的东西,但是报头的单元测试(在实现ngrx之前工作)一直失败,并出现以下错误:

    StaticInjectorError(Platform: core)[StoreFeatureModule -> ReducerManager]: NullInjectorError: No provider for ReducerManager!

    我唯一能想到的是 StoreModule 未导入到 CoreModule . 但是应该吗?当头与状态无关时,为什么测试失败?

    应用模块.ts

    @NgModule({
    declarations: [
        AppComponent,
        LoginComponent,
    ],
    imports: [
        BrowserModule,
        AppRoutingModule,
        CoreModule,
        SharedModule.forRoot(),
        StoreModule.forRoot({}),
        EffectsModule.forRoot([]),
        !environment.production ? StoreDevtoolsModule.instrument({
            maxAge: 5   // retains last 5 states
        }) : []
    ],
    providers: [],
    bootstrap: [ AppComponent ]
    

    })

    核心模块

    @NgModule({
        imports: [
            CommonModule,
        ],
        exports: [
            CommonModule,
            HeaderComponent,
            FooterComponent
        ],
        declarations: [
            HeaderComponent, 
            FooterComponent, 
        ]
    })
    

    共享.module.ts

    @NgModule({
        imports: [
            CommonModule,
            HttpClientModule
        ],
        exports: [
            CommonModule,
            MyComponent
        ],
        declarations: [ MyComponent]
    })
    export class SharedModule {
    

    **标题.组件.规范**

    describe('HeaderComponent', () => {
        let component: HeaderComponent;
        let fixture: ComponentFixture<HeaderComponent>;
        let debugEl: DebugElement;
    
        beforeEach(async(() => {
            TestBed.configureTestingModule({
                imports: [ 
                    ProductsModule,
                    CustomersModule
            ],
            declarations: [ HeaderComponent ],
            providers: [
                { provide: myService, useValue: new MyService() },
            ],
        })
        .compileComponents();
    }));
    
    beforeEach(() => {
        fixture = TestBed.createComponent(HeaderComponent);
        component = fixture.componentInstance;
        debugEl = fixture.debugElement;
        fixture.detectChanges();
    });
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   timdeschryver    6 年前

    因为您的组件使用NgRx存储,所以还必须在 TestBed .

        2
  •  1
  •   Leo Lanese    5 年前
    import { Store, StoreModule } from '@ngrx/store';
    
    describe('test:', () => {
       beforeEach(() => {
       TestBed.configureTestingModule({
       imports: [
        HeldMessagesTabsPageModule,
        StoreModule.forRoot(
          {
            messagesRoot: combineReducers(reducers.reducers)
          },
          {
            initialState: { messagesRoot: { messagesRoot: { template: templateInitialState } } }
          }
        )
      ],
    
      const store: Store<reducers.State>;
    }
    
    beforeEach(() => {
      store = TestBed.get(Store);
      spyOn(store, 'dispatch').and.callThrough();
    });
    
    推荐文章