Тестирование компонента приложения с помощью метода конструктора, вызывающего службу - PullRequest
0 голосов
/ 10 января 2019

У меня есть приложение angular 7, и я пытаюсь научиться правильно тестировать мое приложение.

В настоящее время в моем application component.ts у меня есть служба оповещений, которая используется для отображения диалогов, которая является динамическим компонентом.

export class AppComponent {

    constructor(private alertService: AlertHelperService,
                private viewContainerRef: ViewContainerRef){
                   alertService.setRootViewContainerRef(viewContainerRef);
                   alertService.AddAlertComponent();
                  }
}

У меня установлен стандартный тест для проверки правильности инициализации приложения:

    describe('AppComponent', () => {
      let mockAlertHelperService;
      beforeEach(async(() => {
        let alertService: AlertHelperService;
        mockAlertHelperService - jasmine.createSpyObj(['setRootViewContainerRef', 'AddAlertComponent']);

        TestBed.configureTestingModule({
          imports: [
            RouterTestingModule,
            FontAwesomeModule,
          ],
          declarations: [
            AppComponent,
            ToastComponent,
            AlertComponent
          ],
          providers: [
            { provide: AlertHelperService, useValue: mockAlertHelperService }

                ]
        }).compileComponents();
      }));

       it('should create the app', () => {
         const fixture = TestBed.createComponent(AppComponent);
         const app = fixture.debugElement.componentInstance;
         alertService = TestBed.get(AlertHelperService);
         expect(app).toBeTruthy();
  });

Я хочу протестировать компонент самостоятельно. Однако, когда я запускаю тест, я получаю эту ошибку:

Ошибка: не найдена фабрика компонентов для AlertComponent. Вы добавили его в @ NgModule.entryComponents?

Мне известно, что это говорит о том, что компонент Alert не может быть найден. Я импортирую его в сервис и не уверен, почему это происходит:

import { Injectable, ViewContainerRef, ComponentFactoryResolver } from '@angular/core';
import { AlertComponent } from './alert.component';

    @Injectable({
       providedIn: 'root'
    })
    export class AlertHelperService {

      rootViewContainer: ViewContainerRef;

      constructor(private factoryResolver: ComponentFactoryResolver) { }


      setRootViewContainerRef(viewContainerRef: ViewContainerRef) {
        this.rootViewContainer = viewContainerRef;
      }

      AddAlertComponent() {
        const factory = this.factoryResolver.resolveComponentFactory(AlertComponent);
        const component = factory.create(this.rootViewContainer.parentInjector);
        this.rootViewContainer.insert(component.hostView);
      }
    }

Я попытался импортировать его, объявить его и другие подходы, но ни один из них не работает. Всегда одна и та же ошибка

...