Получение Нет провайдера для AppComponent - PullRequest
0 голосов
/ 30 сентября 2019

Мое приложение имеет NavComponent и AppComponent. AppComponent является компонентом начальной загрузки. AppComponent имеет DialogBoxComponent. Всякий раз, когда DialogBox закрывается, он генерирует событие. Я хочу, чтобы NavComponent подписался на это событие. Для этого я ввел AppComponent в NavComponent

  constructor(private appComponent:AppComponent,private dialogService:DialogBoxService,private userManagementService: UserManagementService, private fb:FormBuilder, private helper:HelperService) {
  }

, а затем подписался на DialogBoxComponent 'событие закрытия.

subscribeToDialogCloseEvent(){
    this.appComponent.dialogComponent.dialogCloseEvent.subscribe((event:DialogCloseReturnContext)=>{
  ...
}

Приложение работает нормально в разработкережиме, но когда я пытаюсь написать для него модульный тест, я получаю сообщение об ошибке

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

Установлен тестовый набор

describe('NavComponentComponent - user not signed in initially', () => {
  let component: NavComponentComponent;
  let fixture: ComponentFixture<NavComponentComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [NavComponentComponent,
        AppComponent,
        ContentComponentComponent,
        FooterComponentComponent,
        HomepageContentComponentComponent,
        ShowErrorsComponent,
        ProgressBarComponent,
        SignupComponentComponent,
        HomepageContentComponentComponent,
        NewPracticeQuestionComponent,
        PraticeQuestionListComponent,
        QuestionDetailsComponent,
        PageNotFoundComponent,
        DialogBoxComponent],
      imports: [ReactiveFormsModule, RouterModule, HttpClientModule, AppRoutingModule],
      providers: [WebToBackendInterfaceService,
        AuthService,
        {provide: UserManagementService, useClass: MockUserManagementServiceUserNotSignedInInitially},//mock user management service
        HelperService,
        {provide: DialogBoxService, useClass: MockDialogBoxService},
        {provide: APP_BASE_HREF, useValue: '/'}],
    })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(NavComponentComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  fit('should get initial signin state and set sign in state to false if user isn\'t initially signed in',(done)=>{
    let navComponent:NavComponentComponent = component;
    /*The idea of unit test is that UserManagementService might not be available yet
    so mock UserManagementService
     */
    let userManagementService = TestBed.get(UserManagementService);//component.userManagementService;
    console.log('got mocked user management service',userManagementService);
    localStorage.removeItem('id_token');
    localStorage.removeItem('user-details');
    //component.subscribeToUserSignInState();
    console.log('component is ',navComponent);
    setTimeout(()=>{
      expect(navComponent.userLoggedIn).toBeFalsy();
      done();
    },2000);


  });

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...