Сначала вы хотите изменить hostlistener в вашей директиве, чтобы он был похож на это или что-то похожее, в зависимости от того, какое событие вы хотите прослушать:
@HostListener('keydown', ['$event'])
Поскольку вы помещаете директиву на вход вам не нужно искать ввод в вашей директиве, это также заставит его наблюдать только «keydown» на элементе host. Предполагается, что первым параметром HostListener будет событие, которое вы слушаете, а не только имя элемента.
Так что теперь, если вы измените свой тест на выдачу события keydown со значением во входе, имеющим Если длина больше 14, вы должны сначала выполнить этот оператор if следующим образом:
it('should input value length > 14', () => {
fixture = TestBed.createComponent(TestAutoDashNricComponent);
const input = fixture.debugElement.query(By.directive(AutoDashNricDirective));
// set value of input to something longer than 14
input.nativeElement.value = '85060135229900000000123';
const event = ({
// set target to the input so you don't need to get it from the directive itself
target: input.nativeElement,
} as unknown) as KeyboardEvent;
// trigger keydown with created event
input.triggerEventHandler('keydown', event);
// check length of input value
expect(input.nativeElement.value.length).toBe(14);
});
Также обратите внимание, что я установил цель, чтобы она указывала на вход, который вызывает директиву. Таким образом, вам не нужно искать «вход» внутри самой директивы.
В этом примере вы сможете использовать другие операторы if else, выполняя что-то подобное.