Angular Jest 테스트에서 창, 문서 및 마우스 클릭 이벤트 속성 시뮬레이션

괴롭히다

팝업 또는 그 안에 클릭했는지 확인하고 클릭하면 닫는 짝수 리스너에 연결된 함수가 있습니다. 창과 문서 개체의 다양한 속성을 사용하여 이러한 사항을 확인 getBoundingClientRect()하고 팝업의 위치를 ​​가져옵니다.

내가 겪는 문제는 테스트에서 모든 것을 시뮬레이션하는 방법을 알 수 없다는 것입니다. Jest에서 조롱 할 때 창 개체로 전역 개체를 사용하는 것을 보았습니다.

위치 및 클릭을 확인하는 기능은 다음과 같습니다.

popoverEscape = e => {
  const popover = this.panelEl.nativeElement.getBoundingClientRect();
  const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft
  const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
  const left = popover.left + scrollLeft
  const right = popover.left + scrollLeft + popover.width
  const top = popover.top + scrollTop
  const bottom = popover.top + scrollTop + popover.height

  if(!this.isBetween(e.clientX, left, right) || !this.isBetween(e.clientY, top, bottom)){
  this.closePopover()


  }
};

isBetween(n, a, b) {
   return (n - a) * (n - b) <= 0
}
슬라이드 쇼

다음은 단위 테스트 솔루션입니다.

index.ts:

export class SomeComponent {
  panelEl = {
    nativeElement: document.createElement('div'),
  };

  popoverEscape = (e) => {
    const popover = this.panelEl.nativeElement.getBoundingClientRect();
    const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
    const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
    const left = popover.left + scrollLeft;
    const right = popover.left + scrollLeft + popover.width;
    const top = popover.top + scrollTop;
    const bottom = popover.top + scrollTop + popover.height;

    if (!this.isBetween(e.clientX, left, right) || !this.isBetween(e.clientY, top, bottom)) {
      this.closePopover();
    }
  };

  isBetween(n, a, b) {
    return (n - a) * (n - b) <= 0;
  }

  closePopover() {}
}

index.test.ts:

import { SomeComponent } from './';

describe('59737707', () => {
  afterEach(() => {
    jest.clearAllMocks();
    jest.restoreAllMocks();
  });
  describe('#popoverEscape', () => {
    it('should close popover if first isBetween return falsy', () => {
      Object.defineProperty(window, 'pageXOffset', { value: 100 });
      document.documentElement.scrollTop = 200;
      const comp = new SomeComponent();
      const rect = { left: 10, width: 20, top: 10, height: 50 };
      jest.spyOn(comp.panelEl.nativeElement, 'getBoundingClientRect').mockReturnValueOnce(rect as DOMRect);
      jest.spyOn(comp, 'isBetween').mockReturnValueOnce(false);
      comp.closePopover = jest.fn();
      const mEvent = { clientX: 100, clientY: 200 };
      comp.popoverEscape(mEvent);
      expect(comp.panelEl.nativeElement.getBoundingClientRect).toBeCalledTimes(1);
      expect(comp.closePopover).toBeCalledTimes(1);
      expect(comp.isBetween).toBeCalledTimes(1);
    });

    it('should close popover if second isBetween return falsy', () => {
      Object.defineProperty(window, 'pageXOffset', { value: 100 });
      document.documentElement.scrollTop = 200;
      const comp = new SomeComponent();
      const rect = { left: 10, width: 20, top: 10, height: 50 };
      jest.spyOn(comp.panelEl.nativeElement, 'getBoundingClientRect').mockReturnValueOnce(rect as DOMRect);
      jest
        .spyOn(comp, 'isBetween')
        .mockReturnValueOnce(true)
        .mockReturnValueOnce(false);
      comp.closePopover = jest.fn();
      const mEvent = { clientX: 100, clientY: 200 };
      comp.popoverEscape(mEvent);
      expect(comp.panelEl.nativeElement.getBoundingClientRect).toBeCalledTimes(1);
      expect(comp.closePopover).toBeCalledTimes(1);
      expect(comp.isBetween).toBeCalledTimes(2);
    });
  });
});

커버리지 보고서가 포함 된 단위 테스트 결과 :

 PASS  src/stackoverflow/59737707/index.test.ts (14.308s)
  59737707
    #popoverEscape
      ✓ should close popover if first isBetween return falsy (12ms)
      ✓ should close popover if second isBetween return falsy (3ms)

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |    94.12 |       75 |       50 |    93.75 |                   |
 index.ts |    94.12 |       75 |       50 |    93.75 |                21 |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        16.602s

커버되지 않은 분기 및 기능에 대해 동일한 방법을 수행하고 테스트 커버리지를 100 %로 개선 할 수 있습니다.

소스 코드 : https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/59737707

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Board (JPanel) 내에서 마우스 클릭 시뮬레이션

분류에서Dev

CGWindowListCreate에서 다른 창에서 마우스 다운 이벤트 시뮬레이션

분류에서Dev

단위 테스트에서 Angular2 트리거 버튼 클릭 및 이벤트 처리 확인

분류에서Dev

DirectX 게임에서 Java에서 마우스 클릭 시뮬레이션

분류에서Dev

JavaScript에서 버튼에 대한 마우스 클릭 시뮬레이션

분류에서Dev

특정 화면 좌표에서 마우스 클릭 시뮬레이션

분류에서Dev

Angular 지시문에 대한 단위 테스트에서 클릭 이벤트를 트리거하는 방법

분류에서Dev

마우스 클릭 하이퍼 링크 팝업 창이 차단되고 탭에서 열리지 않는 시뮬레이션

분류에서Dev

창에서 전역 마우스 클릭 이벤트를 억제하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트에서 클릭 이벤트를 시뮬레이션하는 방법

분류에서Dev

그리드 행에서 클릭 이벤트 시뮬레이션

분류에서Dev

raphael js 경로에서 클릭 이벤트 시뮬레이션

분류에서Dev

ListBox에서 선택 후 마우스 클릭 이벤트

분류에서Dev

C #에서 마우스 클릭 이벤트 캡처

분류에서Dev

Angular 1-테스트에서 창 크기 조정 이벤트 트리거

분류에서Dev

Angular + Jasmine에서 이벤트 체인 및 module.run () 테스트

분류에서Dev

Chart.js 및 Angular-차트에서 이벤트 클릭

분류에서Dev

마우스 클릭 시뮬레이션을 위해 문자열에서 입력 받기

분류에서Dev

문서 클릭 이벤트 및 타겟

분류에서Dev

시뮬레이션 된 클릭이 promise를 호출하는 함수를 호출 할 때 React의 Jest 및 Enzyme으로 테스트

분류에서Dev

페이지에서 자바 스크립트 클릭 시뮬레이션

분류에서Dev

Angular의 클릭 이벤트에서 elementRef에 액세스

분류에서Dev

클릭 및 호버 이벤트로 jquery에서 가상 마우스 패드 만들기

분류에서Dev

KineticJS : 원의 '클릭'이벤트에서 마우스 버튼, x 및 y 가져 오기

분류에서Dev

C # 확인란 및 마우스 클릭 이벤트

분류에서Dev

클릭 및 마우스 이벤트를 함께 사용

분류에서Dev

uinput 하위 시스템에서 마우스 포인터를 이동 한 후 클릭 이벤트를 에뮬레이트 할 수 없음

분류에서Dev

자바 스크립트에서 버튼 클릭 시뮬레이션

분류에서Dev

여러 기하 창에서 마우스 이벤트 감지

Related 관련 기사

  1. 1

    Board (JPanel) 내에서 마우스 클릭 시뮬레이션

  2. 2

    CGWindowListCreate에서 다른 창에서 마우스 다운 이벤트 시뮬레이션

  3. 3

    단위 테스트에서 Angular2 트리거 버튼 클릭 및 이벤트 처리 확인

  4. 4

    DirectX 게임에서 Java에서 마우스 클릭 시뮬레이션

  5. 5

    JavaScript에서 버튼에 대한 마우스 클릭 시뮬레이션

  6. 6

    특정 화면 좌표에서 마우스 클릭 시뮬레이션

  7. 7

    Angular 지시문에 대한 단위 테스트에서 클릭 이벤트를 트리거하는 방법

  8. 8

    마우스 클릭 하이퍼 링크 팝업 창이 차단되고 탭에서 열리지 않는 시뮬레이션

  9. 9

    창에서 전역 마우스 클릭 이벤트를 억제하는 방법은 무엇입니까?

  10. 10

    자바 스크립트에서 클릭 이벤트를 시뮬레이션하는 방법

  11. 11

    그리드 행에서 클릭 이벤트 시뮬레이션

  12. 12

    raphael js 경로에서 클릭 이벤트 시뮬레이션

  13. 13

    ListBox에서 선택 후 마우스 클릭 이벤트

  14. 14

    C #에서 마우스 클릭 이벤트 캡처

  15. 15

    Angular 1-테스트에서 창 크기 조정 이벤트 트리거

  16. 16

    Angular + Jasmine에서 이벤트 체인 및 module.run () 테스트

  17. 17

    Chart.js 및 Angular-차트에서 이벤트 클릭

  18. 18

    마우스 클릭 시뮬레이션을 위해 문자열에서 입력 받기

  19. 19

    문서 클릭 이벤트 및 타겟

  20. 20

    시뮬레이션 된 클릭이 promise를 호출하는 함수를 호출 할 때 React의 Jest 및 Enzyme으로 테스트

  21. 21

    페이지에서 자바 스크립트 클릭 시뮬레이션

  22. 22

    Angular의 클릭 이벤트에서 elementRef에 액세스

  23. 23

    클릭 및 호버 이벤트로 jquery에서 가상 마우스 패드 만들기

  24. 24

    KineticJS : 원의 '클릭'이벤트에서 마우스 버튼, x 및 y 가져 오기

  25. 25

    C # 확인란 및 마우스 클릭 이벤트

  26. 26

    클릭 및 마우스 이벤트를 함께 사용

  27. 27

    uinput 하위 시스템에서 마우스 포인터를 이동 한 후 클릭 이벤트를 에뮬레이트 할 수 없음

  28. 28

    자바 스크립트에서 버튼 클릭 시뮬레이션

  29. 29

    여러 기하 창에서 마우스 이벤트 감지

뜨겁다태그

보관