Angular 在Jasmine中使用target.value分派事件

Angular 在Jasmine中使用target.value分派事件,angular,jasmine,Angular,Jasmine,如何在包含目标.value的Jasmine单元测试中调度更改事件 被测部件采用如下方法: @HostListener('change',['$event'])) onChange(事件){ 常量值=event.target.value; 这个值=值; } 请参阅我当前的单元测试草稿中的TODO。在调度事件时,我需要包含target.value,但是事件接口似乎不包含target属性 scenarios.forEach((scenario)=>{ 它(`changing control valu

如何在包含
目标.value
的Jasmine单元测试中调度
更改
事件

被测部件采用如下方法:

@HostListener('change',['$event']))
onChange(事件){
常量值=event.target.value;
这个值=值;
}
请参阅我当前的单元测试草稿中的
TODO
。在调度事件时,我需要包含
target.value
,但是
事件
接口似乎不包含
target
属性

scenarios.forEach((scenario)=>{
它(`changing control value应该得到正确的值${scenario.condition}`,fakeAsync(()=>{
//安排
component.writeValue(scenario.writenControlValue);
//表演
fixture.detectChanges();
fixture.whenStable()然后(()=>{
const input=fixture.debugElement.query(By.css('input')).nativeElement;
input.value=scenario.newControlValue;
input.dispatchEvent(新事件('change');//TODO:将scenario.newControlValue传递给事件的target.value
//断言
expect(component.value).toEqual(scenario.expectedResult);
});
}));
});
看看这个,也许你可以使用
triggerEventHandler

scenarios.forEach((scenario) => {
  it(`changing control value should result in correct value ${scenario.condition}`, fakeAsync(() => {
    // arrange
    component.writeValue(scenario.writtenControlValue);

    // act
    fixture.detectChanges();
    fixture.whenStable().then(() => {
      const input = fixture.debugElement.query(By.css('input'));
      input.nativeElement.value = scenario.newControlValue;
      input.triggerEventHandler('change', { target: input.nativeElement });


      // assert
      expect(component.value).toEqual(scenario.expectedResult);
    });
  }));
});

我也以此为指导

谢谢!这似乎是一个好办法。出于某种原因,它对我不起作用(事件处理程序没有被激发),但它可能是用户错误。目前,我正在从测试中手动调用事件处理程序,而不是分派事件或使用
triggerEventHandler
,这很有效,但有点不成熟。