如何对角度@Output

时间:2018-12-14 07:25:53

标签: angular karma-jasmine

覆盖率报告中的问题: enter image description here

我在components.ts内部有这段代码

export class TimelinePlotComponent implements OnInit, OnChanges, OnDestroy {

form: FormGroup;
@Output() onchange: EventEmitter<any> = new EventEmitter<any>();

constructor() {}

initForm() {
    this.form = new FormGroup({
      timeRange: new FormControl(this.time_range_options_active, []),
      metric: new FormControl(this.metric_options_active, []),
      groupBy: new FormControl(this.group_by_options_active, []),
    });

    // How to unit test this part of the code
    this.form.valueChanges.subscribe( res => {
      console.log('form-changed');
      this.onchange.emit(res);
    });
  }

}

component.spec.ts

  fit('should listen for form changes', async() => {
    component.form.controls['groupBy'].setValue('color');
    fixture.detectChanges();
    fixture.whenStable().then(() => {
      // your expectations.
      expect(component.form.valid).toBeTruthy();
      component.onchange.subscribe( res => {
        console.log('res: ', res);
      });

    });
  });
  

错误:什么也没有发生,我不知道如何对触发输出事件发射器的表单进行单元测试。

如您所见,这不起作用,如何对单元测试表单进行更改有任何帮助?

1 个答案:

答案 0 :(得分:2)

我认为您根本不需要run_in(node, 'sudo init 0') ,也不需要whenStable。您应该使用async来触发更改检测。但这仅应在实际开始之前完成,以触发detectChanges()钩子(和朋友)。

还使用ngOnInit来确保已调用输出:

spy