Для исправления этих ошибок необходимо внести несколько изменений:
1) Удалить providers
из конфигурации TestBed
TestBed.configureTestingModule({
declarations: [ DynamicLoaderComponent,AddComponentDirective ,DynamicComponent],
providers:[DynamicLoaderComponent,ComponentFactoryResolver] <== remove this line
})
2) Вам не нужно получать свой компонентиз DI,
, поэтому замените
it('should create the DynamicLoaderComponent', inject([DynamicLoaderComponent], (component : DynamicLoaderComponent) => {
expect(component).toBeTruthy();
}));
на:
it('should create the DynamicLoaderComponent', () => {
expect(component).toBeTruthy();
});
3) compileComponents()
вызов необходим, только если вы запускаете тесты в среде без CLI.
С Angular doc
Вызов compileComponents () закрывает текущий экземпляр TestBed для дальнейшей настройки.Вы не можете вызывать больше ни методов конфигурации TestBed, ни configureTestingModule (), ни методов переопределения ....TestBed выдает ошибку, если вы пытаетесь.
Это означает, что ваш TestBed.overrideModule
вызов не будет иметь никакого эффекта и фабрика DynamicComponent
не будет найдена.
Так что удалите .compileComponents();
TestBed.configureTestingModule({
declarations: [ DynamicLoaderComponent,AddComponentDirective ,DynamicComponent],
providers:[DynamicLoaderComponent,ComponentFactoryResolver]
})
.compileComponents(); <==== remove this
Если вы находитесь в среде non-angular-cli, вы можете вызвать ее после переопределения модуля:
TestBed.overrideModule(BrowserDynamicTestingModule, {
set: {
entryComponents: [DynamicComponent]
}
});
TestBed.compileComponents(); <== this line
После всех измененийЯ написал выше, тест должен быть выполнен без ошибок.
Пример Plunker