NullInjectorError: Отсутствует поставщик для ReducerManager для тестирования угловых спецификаций - PullRequest
0 голосов
/ 30 мая 2019

Я тестирую компонент ngrx/store. на тестовом наборе NullInjectorError: No provider for ReducerManager

Сообщение об ошибке:

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

Как это исправить? вот мой тестовый файл спецификации:


    import { HeaderNavShellComponent } from './header-nav-shell.component';
    import { HeaderComponent } from './../../header/header.component';
    import { HeaderNavComponent } from './../../components/header-nav/header-nav.component';
    import { StoreModule, Store  } from '@ngrx/store';
    import { TranslateFakeLoader,TranslateLoader,TranslateModule,TranslateService, TranslateStore } from '@ngx-translate/core';
    import { RouterTestingModule } from '@angular/router/testing';
    import { reducerShared } from "./../../state/reducers/shared.reducer";
    import { HttpClientModule, HttpClient } from '@angular/common/http';
    import { of } from 'rxjs';
    import * as fromRoot from  "./../../../calendar/state";
    // import { reducerCalendar } from  "./../../../calendar/state/calendar.reducer";


    describe('HeaderNavShellComponent', () => {

        let component: HeaderNavShellComponent;
        let fixture: ComponentFixture<HeaderNavShellComponent>;
        let dispatchSpy;
        let store:Store<fromRoot.NewState>

        beforeEach(async(() => {
            TestBed.configureTestingModule({
                declarations: [ HeaderNavShellComponent, HeaderComponent, HeaderNavComponent ],
                imports:[
                    HttpClientModule,
                    StoreModule.forFeature("shared", reducerShared ),
                    RouterTestingModule,
                    TranslateModule.forChild({
                      loader: {
                            provide: TranslateLoader,
                            useClass: TranslateFakeLoader
                      }
                    })
                ],
                providers:[TranslateService, TranslateStore, HttpClient ]
            })
            .compileComponents();
        }));

         beforeEach(fakeAsync(() => {

            store = TestBed.get(Store);
            spyOn(store, 'dispatch').and.callThrough();

            fixture = TestBed.createComponent(HeaderNavShellComponent);
            component = fixture.componentInstance;
            fixture.detectChanges();

        }));


        it('should create', fakeAsync(() => {
            expect(component).toBeTruthy();
        }));

    });

вот файл ts:

    import { Component, OnInit } from '@angular/core';
    import { Router } from '@angular/router';
    import { Store, select } from "@ngrx/store";
    import { Observable } from "rxjs";
    import { ModelEvent, EventState } from "./../../../calendar/models/model.event";
    import { ModelLang, ModelLonguage } from "./../../../shared-components/models/models";
    import { CalendarActions, Load, EventSelected } from "./../../../calendar/state/calendar.actions";
    import * as fromRoot from  "./../../../calendar/state";
    import * as fromObservables from  "./../../state";
    import { Lang, LoadLang } from "./../../state/actions/shared.actions";
    import { ShowNavi } from "./../../../shared-components/state/actions/shared.actions";

    @Component({
        selector: 'header-nav-shell',
        templateUrl: './header-nav-shell.component.html',
        styleUrls: ['./header-nav-shell.component.scss']
    })
    export class HeaderNavShellComponent implements OnInit {

        eventList$:Observable<ModelEvent[]>;
        eventListSize$:number;
        currentLang$:Observable<string>;
        langList$:Observable<ModelLonguage[]>;

        constructor(private store:Store<fromRoot.NewState>, private router:Router) { }

        ngOnInit() {
            this.store.dispatch(new Load());
            this.store.dispatch( new LoadLang());
            this.eventList$ = this.store.pipe(select(fromRoot.getEvents));
            this.currentLang$ = this.store.pipe(select(fromObservables.getCurrentLang));
            this.langList$ = this.store.pipe(select(fromObservables.getLangList));
        }

        eventSelected(event) {
            this.store.dispatch(new EventSelected(event));
            this.router.navigateByUrl("iboCalendar");
        }

        langChanged(event) {
            this.store.dispatch( new Lang(event.Name));
        }

        leftNaviHandler(event):void {
            this.store.dispatch(new ShowNavi(event));
        }

    }

Заранее спасибо

...