Протестируйте угловой компонент, используя другой компонент с проекцией содержимого

#angular #unit-testing #angular-content-projection

Вопрос:

Как я могу модульно протестировать компонент, который использует другой компонент, использующий проекцию содержимого с помощью ng-шаблона? Поскольку это модульный тест, я хотел бы пощадить объявление другого компонента.

Вот пример:

 Component({
  selector: "my-confirmation",
  template: `
    <ng-container *ngFor="let checkboxTemplate of checkboxTemplates">
      <ng-container *ngTemplateOutlet="checkboxTemplate"></ng-container>
    </ng-container>
`,
})
export class ConfirmationComponent {  @Output() public close = new EventEmitter<boolean>();
  @ContentChildren("checkboxTemplate") public checkboxTemplates: QueryList<TemplateRef<void>>;
}

@Component({
  template: `
    <my-confirmation>
      <ng-template #checkboxTemplate>
        <mat-checkbox id="dont-ask">
          Do not show this again.
        </mat-checkbox>
      </ng-template>
    </my-confirmation>
`
})
export class UnderTestComponent {}



describe('UnderTestComponent', () => {
  let component: UnderTestComponent;
  let fixture: ComponentFixture<UnderTestComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [
        UnderTestComponent,
        // This is a unit test, I do not want to include other components
        // ConfirmationComponent
      ]
    });
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(UnderTestComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(fixture.debugElement.query(By.css("#dont-ask")).toBeTruthy();
  });
});