본문 바로가기
Web

[Jest]jest 테스팅 프레임워크를 사용한 테스팅 환경 세팅 및 오류 해결

by 다봄이 2020. 8. 6.

(2020.02.24 포스팅, 원본은 내 네이버 블로그)

개발환경: nodeJS, Jest

인턴 기간이 막바지에 접어들면서, 개발 모듈을 테스팅하고 명세를 작성하는 업무를 맡게 되었다. 여러 어려운 테스팅 라이브러리를 둘러보다가, 현재 자바스크립트 개발자 사이에서 많이 쓰인다는 jest를 사용하기로 했다.

Jest : 자바스크립트 테스팅 프레임워크

  • Jest는 페이스북에서 만든 테스팅 라이브러리로, 최근 백엔드에서도 기존의 자바스크립트 테스팅 라이브러리를 대체하며 널리 쓰이고 있는 추세라고 한다.

  • Jest는 Mocha-Chai와 같이 기존의 테스팅 라이브러리 사용 시에는 Test Runner와 Test Mathcher를 조합해서 사용했어야 했던 불편함을 해소하였다. Jest만 설치하면 Test Runner와 Test Mathcher, Test Mock 프레임워크까지 제공해주기 때문이며 Jest가 테스팅 프레임워크라고 불리는 이유이다.

    Jest 테스팅 환경 설정

        $ mkdir __test__
        $ npm init -y // package.json 생성(새 자바스크립트 프로젝트 생성)
        $ npm install -D jest // 개발 의존성으로 jest 라이브러리 설치

    jest는 기본적으로 test 폴더 내의 테스트 코드는 전부 테스팅한다.


    package.json 파일의 스크립트는 다음과 같이 설정되어 있다. 테스트 스크립트를 jest로 수정하여 터미널에 npm test라고 입력하면 jest 커맨드가 실행되도록 한다.

        "main": "index.js",
        "scripts": {
          "test": "jest"
        },




    테스트를 위해 sum.js에 간단한 함수를 작성하고 sum.test.js에 테스트 코드를 작성하고 실행시켜 보았다.
    npm이 잘 동작함을 알 수 있다.

    detectOpenHandels

    오류1

        Jest did not exit one second after the test run has completed.
    
        This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.

    테스트 통과는 하는데 위와 같은 경고를 만났다. 위 경고는 다음 방법으로 해결되었다.

        beforeAll(async () => {
            await firebase.firestore().enableNetwork();
        });
        ...
        afterAll(async () => {
            await firebase.firestore().disableNetwork();    
        });

오류2


스크립트에 detectOpenHandles 옵션을 설정한다.
옵션을 설정해두면 npm test로 --detectOpenHandles 옵션의 jest가 실행되므로 스크립트를 바꿔준다.


테스트 성공

유용한 사이트

  1. Jest로 기본적인 테스트 작성하기
  2. Jest로 비동기 코드 테스트 작성하기
  3. 연애의 과학 백엔드 팀 기술블로그 중 유닛 테스트 내용

댓글