У меня есть приложение 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);
}
}
Я попытался импортировать его, объявить его и другие подходы, но ни один из них не работает. Всегда одна и та же ошибка