Как написать контрольный пример для оператора if else в Angular (Жасмин) - PullRequest
1 голос
/ 24 марта 2020

Я пишу контрольные примеры для пользовательской директивы в angular. Вот мой код в stackblitz . Может ли кто-нибудь дать мне знать, как я могу охватить выделенное, если еще заявление.

if (trimmedValue.length > 14) {
  // how to cover this statement
  trimmedValue = trimmedValue.substr(0, 14);
}

if (trimmedValue.substr(6, 2) !== '') {
  // how to cover this statement
  nricNumber.push(trimmedValue.substr(6, 2));
}

1 Ответ

1 голос
/ 24 марта 2020

Сначала вы хотите изменить 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, выполняя что-то подобное.

...