swsnu / swppfall2019

31 stars 23 forks source link

[small tip] Making Travis CI ensure Test Coverage Threshold #167

Open davin111 opened 4 years ago

davin111 commented 4 years ago

안녕하세요, 어제 실습한 Travis CI 연동 이후, 저희 팀 repo에 test coverage를 일정 수준 넘겨야 Travis CI가 pass해주도록 만드는 방법을 찾아봤습니다. 이를 이용하실 팀들이 있을 것 같아서 공유드리고자 합니다. 물론 워낙 간단해서 이미 아시는 분들도 많을 것이고, 찾아보시면 금방 나오는 것이긴 합니다. TDD를 지향한다면 필수이겠지요!

Making Travis CI ensure Test Coverage Threshold

Frontend

frontend directory의 package.json 파일을 수정해주시면 됩니다. 실습 5에서, 특정 파일에 대해서는 test하지 않도록 했던 것(collectCoverageFrom)과 비슷한 방식입니다. 예를 들어 아래와 같이 하면, 4가지 유형 coverage가 모두 90%를 넘어야만 한다는 것을 Travis CI가 yarn test 등을 돌릴 때 강제해줍니다.

  "jest": {
    "collectCoverageFrom": [
      "src/**/*.{js,jsx}",
      "!src/index.js",
      "!src/serviceWorker.js"
    ],
    "coverageThreshold": {
      "global": {
        "branches": 90,
        "functions": 90,
        "lines": 90,
        "statements": 90
      }
    }
  }

만약 넘지 못하면 아래와 같은 출력을 Travis CI에서 보실 수 있습니다.

스크린샷 2019-10-25 14 25 20

Backend

backend의 경우, 실습 7에서 django test의 coverage를 보기 위해 사용한 coverage 라이브러리를 사용하는 방식으로 가능합니다. 이를 위해 당연히 Travis가 coverage를 install 하게 해야합니다. 아래와 같이 하면, 역시 django coverage 90%를 준수하게 할 수 있습니다.

...
  - language: python
    python: 
    - "3.6"
    install:
    - pip install coverage
    script:
    - coverage run --source='.' ./backend/manage.py test # 물론 manage.py가 있는 경로에 맞게
    - coverage report --fail-under=90
...

만약 넘지 못하면 아래와 같은 출력을 Travis CI에서 보실 수 있습니다.

스크린샷 2019-10-25 14 40 11