Предоставление "entryComponents" для TestBed
У меня есть компонент, который получает компонентный компонент компонента для динамического создания в качестве дочернего элемента.
let componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentToCreate);
this.componentReference = this.target.createComponent(componentFactory);
Я пытаюсь написать unit test и передать некоторый TestComponent для его создания и рендеринга.
TestBed
.configureTestingModule(<any>{
declarations: [MyAwesomeDynamicComponentRenderer, TestHostComponent],
entryComponents: [TestComponent],
});
Есть листинг для "any", потому что configureTestingModule
ожидает TestModuleMetadata
, у которого нет entryComponents
, но я получаю ошибку: "No component factory найдено для TestComponent".
Как я могу предоставить entryComponents
для TestBed
?
Ответы
Ответ 1
Вы также можете сделать это непосредственно в своем тестовом файле, если хотите:
import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; // DO not forget to Import
TestBed.configureTestingModule({
declarations: [ MyDynamicComponent ],
}).overrideModule(BrowserDynamicTestingModule, {
set: {
entryComponents: [ MyDynamicComponent ],
}
});
Ответ 2
Хорошо, я понял это. В тесте вы должны определить новый модуль, в котором вы объявите свой макетный компонент, и укажите его как entryComponent
.
@NgModule({
declarations: [TestComponent],
entryComponents: [
TestComponent,
]
})
class TestModule {}
И импортируйте его в TestBed
TestBed
.configureTestingModule({
declarations: [ValueComponent, TestHostComponent],
imports: [TestModule],
});
Я надеюсь, что это поможет кому-то:]