Google Apps Script에서 Unit Testing 하기
QUnitGS2, GatT 등등...
google-apps-script unit-testing qunit tap
1. 개요
- 책을 좀 읽다보니, 내가 개발하는 모든 프로젝트에 유닛 테스팅 환경이 필요하다는 생각이 든다
- 요즘 주로 사용하는 언어인 Python, Javascript는 완벽한 환경이 준비되어 있다
- Python :
-
PyScaffold 에서
pytest
와pytest-cov
를 같이 써본 적이 있다 - 그 외에도 많은 것 같다
-
PyScaffold 에서
- Javascript :
- Refactorng 2nd 공부할 때 Mocha + chai 환경을 써본 적이 있다
- 역시 경쟁제품이 많다
- Python :
- Google Apps Script 는 위와 같은 단일 개발환경이 아닌 특이한 개발환경이다.
- Google Apps Script는 여러가지 방법으로 개발할 수 있지만,
- 현재 나는 아래 환경으로 개발중이다.
-
clasp(로컬,개발)
+Typescript(로컬,개발)
+GAS Online(온라인,실행)
-
- 어차피 Google Drive의 온라인 서비스를 이용하기 위해 GAS를 사용하는 것이므로
- 이중
GAS Online
은 필수이다
- 이중
- GAS는 Javascript base 이지만 위의 수많은 제품들이
- 터미널 실행환경인
node.js
기반으로 하므로 그대로 적용하기는 어렵다
- 터미널 실행환경인
- 별도의 방법을 찾아야 한다
2. 전개
- 제목의 미션에는 다음과 같은 challenge들이 있다
-
node.js
를 사용하지 않고GAS
환경으로 unit-testing framework을 가져올 수 있는가 ? -
GAS Online
환경에서, 테스트를 어떻게 실행하고, 실행 결과를 어떻게 표현할 것인가 ? - 지원하는 테스트가
GAS Online
환경에서 테스트 용도로 사용하기 적합한가 ?
-
GasT
- 관련링크
- Original : GasT - Google Apps Script Testing-framework, github
- Typescript Conversion : GasT - Google Apps Script Testing-framework in TypeScript, github - 현재 내가 쓰는 툴
- 이름부터 Google Apps Script를 대상으로 개발된 것이라는 것을 알 수 있다
테스트 프레임웍 모듈 가져오기
- 테스트 프레임웍은 GAS의 URL Fetch Service 를 이용하여 바로 가져온다.
- 이 feature는 node.js를 보완해서 나온 deno 와 비슷하다
- 디노도
npm
에서 다운로드 하는 대신 URL을 직접 참조한다는 것이 첫번째 feature 이다
- 디노도
- 이 feature는 node.js를 보완해서 나온 deno 와 비슷하다
- Test 모듈을 별도 파일로 구성할 수 있다
- 위의
URL Fetch
명령만 파일 상단에서 호출하면 된다
- 위의
테스트 실행및 결과 표현
- 테스트를 하고자 할 경우 위에서 별도 파일로 구성한 테스트 모듈로 이동후 테스트 함수를 실행한다
-
GAS Online
실행환경에서실행로그
에 텍스트로 결과를 뿌린다
테스트 작성 프로토콜
적용사례
- clasp_bankbook에 적용한 commit
- 실행방법 :
- 통장모음 Apps Script 에 진입해서
- tests.gs로 이동후
-
gastTestRunner()
를 실행한다
QUnitGS2
- 관련링크
- QUnitGS2 homepage
- QunitGS2 github : 2020년 8월 1일까지 마지막 업데이트 ( 2020-09-03일 확인)
테스트 프레임웍 모듈 가져오기
- 두가지 방법이 있다
- github에 등록된 QunitGS2 는 그대로
GAS Project
이다- 즉, 그대로 내 Apps Script 코드의 일부로 복사하면 사용할수 있다
- 아니면 라이브러리로 등록하는 방법이 있다.
- 저자가 공개 GAS 프로젝트로 등록한 ID로 등록할수도 있고
- 아니면 Github에서 다운로드받아 내 Apps Script 계정에 …
- 별도 프로젝트로 등록한 후 라이브러리로 만들어도 된다.
- github에 등록된 QunitGS2 는 그대로
- 테스트 작성 모듈만 별도로 분리 가능한 것을 확인했다
테스트 실행및 결과 표현
- 테스트 실행 방법이 다소 복잡하다
- 일단 유닛 테스트를 적용하려는 프로젝트를
Web Apps
로 만든다-
Web Apps으로 만드는 방법 을 보면
doGet(e)
함수를 추가하라고 나온다 - 해당 함수는
HtmlOutput
객체를 반환해야 한다
-
Web Apps으로 만드는 방법 을 보면
-
doGet()
함수 추가후배포
를 해야 한다- Step-by-Step 매뉴얼에서는 테스트 코드로 배포하라고 나오지만 … 현재 테스트 코드로는 제대로 안된다 ( 내가 뭔가 잘못했을지도..?)
- 정식 배포를 하면 잘 나온다
- 웹앱 배포 주소로 접속하면 아래와 유사하게 나온다
- 일단 유닛 테스트를 적용하려는 프로젝트를
-
Qunit 홈페이지 에 가보면
Browser Result
와CLI Result
가 있는데 ..-
QUnitGS2
는 그 중Browser Result
를 활용하여 결과를 보여주는 프로젝트이다
-
테스트 작성 프로토콜
- 요즘은 다른 도구들(Jest, Mocha)에 밀려 인기가 주춤하지만 Qunit 도 한 때는 잘나가는 도구였다 (한 때 날렸던 JQuery의 일부 였음)
- qunit의 health score, snykAdvisor : 2021-09-04 현재 98/100 점 이다. 아직 잘 유지보수중이다
- 테스트 작성 방법은 문서화가 잘되어 있다
- GasT에서는 안보이던 hook도 보인다
- Qunit bdd로 검색하면 작성법 관련하여 읽어볼만한 글들이 있는데 읽어보고 뭔가 더 정리해보자
적용사례
- clasp_bankbook에 적용한 commit
- 실행방법 :
- 테스트관련해서 수정을 했으면
- 통장모음 Apps Script 에 진입해서
- 새로
배포관리
를 업데이트 하고 - 새로운
배포버전
web app에 접속한다