Testing
테스트 환경은 mocha와 chai NPM module을 사용하여 구현합니다. 테스트는 이미 실행되고 있는 서버에 HTTP request를 보내 response를 확인하는 방식으로 진행됩니다.
준비물
개발 서버에서 테스트를 하기 위해서는 아래와 같이 .env.test.development 파일을 작성하세요.
SPARCS IP 대역 (143.248.234.0/24) 바깥에서는 개발 DB에 접근할 수 없다는 점에 유의하세요.
API_URL_TEST=[your development server url]
API_PASSWORD=[password used for authentication (login)]
UPLOAD_DIR_TEST=[directory of uploaded files]
JWT_KEY=[a secret string for jwt assignation, should be identical with your test server env variable]
DB_HOST_TEST=[ip of db_dev, currently 52.79.92.127]
DB_PORT_TEST=[port of db_dev, currently 3306]
DB_USER_TEST=sparcs_developer
DB_DATABASE_TEST=kono스테이지 서버에서 테스트를 하기 위해서는 아래와 같이 .env.test.staging 파일을 작성하세요.
API_URL_TEST=[your staging server url, currently ssal.sparcs.org:32822]
API_PASSWORD=[password used for authentication (login)]
UPLOAD_DIR_TEST=[directory of uploaded files]
JWT_KEY=[a secret string for jwt assignation, should be identical with your staging server env variable]
DB_HOST_TEST=[ip of db_dev, currently 52.79.92.127]
DB_PORT_TEST=[port of db_dev, currently 3306]
DB_USER_TEST=sparcs_developer
DB_DATABASE_TEST=kono테스트 실행
다음과 같이 npm script를 실행하여 테스트 코드를 실행할 수 있습니다.
테스트 작성
File Structure
모든 API 엔드포인트 관련 코드는 src/api 디렉토리 내에 존재합니다. 각 엔드포인트는 두 개의 파일로 구성됩니다.
라우팅:
src/api/**/index.js비즈니스 로직:
src/api/**/<endpoint_name>.control.js
테스트 코드는 이에 더하여 src/api/**/<endpoint_name>.test.js 파일에 작성합니다. 그 후, src/test/test.js 파일도 수정하여 새로 작성한 테스트를 importTest 함수를 사용해서 불러오세요.
테스트 환경에서 DB 접근하기
src/test/common.js에서 db.instance 를 import하여 데이터베이스를 조작할 수 있습니다. Knex.js documentation을 참조하세요.
테스트 코드 작성 가이드
서버에 HTTP request를 보낼 때
chai.request함수를 사용하세요.src/test/common.js에서apiURL을 import하여 테스트하려는 서버의 base URL을 가져올 수 있습니다. (development/staging 환경에 따라 앞서 설정했던 환경 변수와 동일하게 설정됩니다.)Response로 돌아온 값을 점검할 때
chai.expect함수를 사용하세요.chaiDocumentationGeneral case와 corner case, 그리고 error handling 관련 테스트를 모두 작성하세요.
변수의 type과 값을 모두 체크하세요.
API 기획 후, 먼저 documentation을 작성하여 원하는 feature가 무엇인지 정확하게 정의한 후, 그에 맞는 테스트 코드를 작성하세요. 테스트 코드 작성 후 테스트에 맞추어 API를 구현하면 기획했던 내용과 다르게 코드가 작성되는 것을 방지할 수 있습니다.
Test set과 각 test의 이름을 적절하게 설정하면 다른 사람들이 테스트가 무엇을 하는지 빠르게 파악할 수 있습니다.
개발 DB는 자유롭게 사용할 수 있습니다. (
DROP TABLE말고는 마음대로 써도 상관 없을 것 같습니다.)
Last updated
Was this helpful?