Предоставление "entryComponents" для TestBed в Angular
У меня есть компонент, который принимает класс компонента для динамического создания дочернего компонента.
let componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentToCreate);
this.componentReference = this.target.createComponent(componentFactory);
Я пытаюсь написать модульный тест и передать в него некоторый TestComponent для создания и рендеринга.
TestBed
.configureTestingModule(<any>{
declarations: [MyAwesomeDynamicComponentRenderer, TestHostComponent],
entryComponents: [TestComponent],
});
Я делаю приведение к "any", потому что configureTestingModule
ожидает TestModuleMetadata
, в котором нет entryComponents
, но я получаю ошибку: "No component factory found for TestComponent".
Как я могу предоставить entryComponents
в TestBed
?
2 ответ(ов)
Вы также можете сделать это напрямую в вашем тестовом файле, если хотите:
import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; // Не забудьте импортировать
TestBed.configureTestingModule({
declarations: [ MyDynamicComponent ],
}).overrideModule(BrowserDynamicTestingModule, {
set: {
entryComponents: [ MyDynamicComponent ],
}
});
Этот код настраивает модуль тестирования для вашего динамического компонента, позволяя использовать его в тестах.
Проблема решена. В тесте вам нужно определить новый модуль, в котором вы объявите свой мок-компонент и также укажете его в entryComponents
.
@NgModule({
declarations: [TestComponent],
entryComponents: [
TestComponent,
]
})
class TestModule {}
Затем импортируйте этот модуль в TestBed
:
TestBed
.configureTestingModule({
declarations: [ValueComponent, TestHostComponent],
imports: [TestModule],
});
Надеюсь, это поможет кому-то! :]
Angular: условный класс с *ngClass
Инструменты для юнит-тестирования JavaScript в TDD
Как протестировать тип выбрасываемого исключения в Jest
Как сбросить <input type="file"> в Angular
Правильный способ отключить поля ввода в Angular 5