Angular:如何测试ContentChild上的指令?

时间:2018-06-11 22:33:22

标签: angular jasmine karma-jasmine karma-runner

我有一个像这样的测试组件:

@Component({
  selector: 'test-wrapper',
  template: `
    <ui-input-list [listData$]="uiInputListDemoData$">
      <input
        focusController [forceFocus$]="forceFocus$"
        valueController
        (ngModelChange)="selectedInputListDemoItem = $event"
      />
    </ui-input-list>
  `
})
class InputListTestWrapperComponent {
  dummyList = ['Foo', 'Bar'];
  uiInputListDemoData$ = new BehaviorSubject<string[]>(this.dummyList);
  selectedInputListDemoItem;
  forceFocus$ = new Subject();
}

如您所见,输入有两个指令,@ Input()forceFocus$属于其中一个指令。在ui-input-list我有

@ContentChild(FocusControllerDirective) fcd: FocusControllerDirective;
@ContentChild(ValueControllerDirective) vcd: ValueControllerDirective;

这两个变量fcdvcd在* ngIf中的模板中使用(显示或不显示列表),但总是编译为<!--bindings={"ng-reflect-ng-if": ""}-->。为什么?我正在利用fixture.whenstable,fixture.detectchanges甚至fakeAsync与tick(3000)。为什么代码在手动测试时有效,但在Jasmine中,指令始终保持未定义,即使在等待之后?我没有错误,也不知道如何调试它。

0 个答案:

没有答案