我在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);
});
}
}
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);
});
});
});
错误:什么也没有发生,我不知道如何对触发输出事件发射器的表单进行单元测试。
如您所见,这不起作用,如何对单元测试表单进行更改有任何帮助?
答案 0 :(得分:2)
我认为您根本不需要run_in(node, 'sudo init 0')
,也不需要whenStable
。您应该使用async
来触发更改检测。但这仅应在实际开始之前完成,以触发detectChanges()
钩子(和朋友)。
还使用ngOnInit
来确保已调用输出:
spy