0

Предоставление "entryComponents" для TestBed в Angular

13

У меня есть компонент, который принимает класс компонента для динамического создания дочернего компонента.

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 ответ(ов)

1

Вы также можете сделать это напрямую в вашем тестовом файле, если хотите:

import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; // Не забудьте импортировать

TestBed.configureTestingModule({
  declarations: [ MyDynamicComponent ],
}).overrideModule(BrowserDynamicTestingModule, {
  set: {
    entryComponents: [ MyDynamicComponent ],
  }
});

Этот код настраивает модуль тестирования для вашего динамического компонента, позволяя использовать его в тестах.

0

Проблема решена. В тесте вам нужно определить новый модуль, в котором вы объявите свой мок-компонент и также укажете его в entryComponents.

@NgModule({
  declarations: [TestComponent],
  entryComponents: [
    TestComponent,
  ]
})
class TestModule {}

Затем импортируйте этот модуль в TestBed:

TestBed
  .configureTestingModule({
    declarations: [ValueComponent, TestHostComponent],
    imports: [TestModule],
  });

Надеюсь, это поможет кому-то! :]

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь