Angular модульный тест с манипуляцией DOM - PullRequest
0 голосов
/ 27 марта 2020

Привет, я хотел бы попросить о помощи, чтобы проверить функцию ниже. Мой подход заключается в том, что я буду назначать tr для моего tagName в моем тестовом примере, чтобы проверить условия if внутри него.

Функция в моем файле TS: :

  domEles : any;
  length : number = 0;

  moveToList(e : KeyboardEvent){
    if(document.activeElement.tagName.toLowerCase() == "tr"){
      this.domEles = document.querySelectorAll('#listTableBody > *');
      this.length = this.domEles.length;

      const activeEle = document.activeElement;
      const activeEleIndex = Array.prototype.indexOf.call(this.domEles, activeEle);

      if((e.key == "ArrowDown" || e.key == "Down") && activeEleIndex < this.length - 1 ) {
        const nextElem = <HTMLElement>activeEle.nextElementSibling;
        nextElem.focus();
      } 

      if((e.key == "ArrowUp" || e.key == "Up") && activeEleIndex > 0) {
        const prevElem = <HTMLElement>activeEle.previousElementSibling;
        prevElem.focus();
      }
      this.detector.detectChanges();
    }
  }

В моем файле SPE C подход:

    it('should trigger moveToList function',()=>{

        let doc = (this as any).document.activeElement;
        doc.tagName = "tr"

        let nextElem = spyOn(doc.activeElement, 'nextElementSibling');
        component.length = 5;
        component.domEles = 1;
        const e = new KeyboardEvent('keydown', {key: 'ArrowDown'});

        component.moveToList(e);

        expect(nextElem).toHaveBeenCalled();

    });

Когда я выполнил тест и проверил, условия if внутри функции moveToList не выполняются / не запускаются этим тестом. Не могли бы вы помочь мне, ребята, за лучший подход к тестовому сценарию без изменения реальных кодов в функции. Заранее спасибо

...