В чем разница между dispatchEvent () и triggerEventHandler () в угловом модульном тестировании с использованием кармы? - PullRequest
0 голосов
/ 04 июня 2019

Я пишу модульный тест для директивы (вызываемой по событию input), которая изменяет входное значение в formControl.Я создал тестовый компонент в моем файле спецификации для того же.Я заметил разницу между triggerEventHandler () и dispatchEvent (), в то время как dispatchEvent () корректно инициировал событие и сработала директива, в случае, если событие triggerEventHandler () не сработало.Может кто-нибудь сообщить мне, в чем разница между ними, кроме того, что dispatchEvent () вызывается на nativeElement.

// directive
export class AlphaNumericCheckDirective {

  constructor(private ctrl: NgControl) {
  }
  @HostListener('input')
  onInputChange() {
    const pattern = /[^0-9]/g;
    const elVal = (this.ctrl.control as AbstractControl).value;
    if (pattern.test(elVal)) {
      const newVal = elVal.replace(pattern, '');
      (this.ctrl.control as AbstractControl).setValue(newVal);
    }
  }
}

// relevant code of test
it('should allow only numerics', () => {
   const fixture = TestBed.createComponent(TestComponent);
   const inputEl = fixture.debugElement.query(By.css('input'));
   (fixture.componentInstance.testGroup.get('testControl') as 
   AbstractControl).patchValue('12a');
   inputEl.triggerEventHandler('input', null); // not triggering the directive
   inputEl.nativeElement.dispatchEvent(new Event('input')); // triggering the directive
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...