본문 바로가기
Web/Node.JS

[패스트캠퍼스 챌린지 29일차] Express - Jest를 통한 API 테스트

by Dev_Mook 2021. 10. 4.

Fast campus Logo

 

Fastcampus_Node.js 수강 목록

 

패스트캠퍼스 작심 30일 챌린지 29일차.

 


 

오늘은 그동안 작성했던 API 코드를 테스트하는 방법에 대해 학습하였다.

Java에서 Junit을 이용하여 테스트하는 것처럼

Nodejs에서는 Javascript에서 제공하는 jest와 super test 패키지를이용해 테스트 코드를 작성하였다.

 

코드를 작성하기 전에 jest는 Jabascript Testing Framework로 여러 시나리오의 테스트를 도와주는 Tool이고,

Super Test는 Express App에 대해 Test를 도와주는 도구라는 점을 알고 있자.

 

코드를 작성하기 위해 먼저 npm을 통해 다음 네가지 패키지를 다운로드 받자.

jest    @types/jest    supertest    @types/supertest

jest와 supertest를 사용할 때 type의 도움을 받기 위해 관련 패키지도 같이 다운받았다.

그리고 RestAPI 코드가 작성된 JS 파일을 외부에서 활용할 수 있도록 아래와 같이 export를 하였다.

module.exports = app

여기까지가 테스트 코드 작성을 위한 준비단계이고,

이제 테스트를 위한 JS 파일을 만들어보자.

 


 

Express - 테스트 코드 작성 실습 

 

테스트를 위한 JS 파일 이름은 패스트캠퍼스 강사님과 동일하게 'app.spec.js'로 하였다.

* app이 어떻게 동작해야 하는지에 대한 규격을 정의한다는 의미로 spec을 사용하였으며,

  test로 바꿔도 상관없다.

 

const supertest = require('supertest')
const app = require('./app')
// request Object를 통해 요청 처리
const request = supertest(app)

test('Our first test', async () => {
  expect(1 + 2).toBe(3)
  const result = await request.get('/users/15').accept('application/json')
  console.log(result)
  // nickname이 String Type인지 테스트
  expect(result.body).toMatchObject({    nickname: expect.any(String),
})

test('retrieve user page', async () => {
  const result = await request.get('users/15').accept('text/html')
  expect(result.text).toMatch(/^<html>.*<\/html>$/)
})

강의를 통해 학습한 테스트 코드이다.

먼저 supertest 모듈과 app 모듈을 import해주고,

app 모듈의 요청을 테스트하기 위해 supertest를 통해 app의 request Object를 가져온다.

 

그리고 test 함수를 통해 드디어 테스트 코드를 작성.

첫번째 테스트 코드의 expect와 toBe 구문부터 간략히 설명하자면

1+2값이 3이 되는지 확인하는 간단한 테스트 코드이다.

 

그럼 원래 첫번째 테스트 코드의 역할을 Get Method로 AcceptType이 application/json인 API 요청이 발생한 경우

request body에 nickname 값이 문자열인지 확인하는 코드이다.

Object의 타입을 체크하는 코드이므로 toMatchObject 함수와 expect.any 함수를 사용하여

문자열의 nickname 값이 정상적으로 전달되었는지 확인할 수 있다.

 

두번째 코드는 acceptType이 text/html인 API 요청이 발생한 경우

API를 통해 넘어온 데이터가 HTML 문서인지 확인하는 코드이다.

이때는 HTML 태그의 문자인지 정규식을 통해 검증하므로 toMatch 함수를 이용하였다.

 


 

소스코드를 작성하는 것만큼 중요한 것이 테스트이다.

하지만 개발자가 하나하나 수작업으로 테스트를 하기에는 시간이 많이 걸리고 비효율적이다.

이때 테스트를 대신 해주는 소스코드를 작성하면 테스트 자동화를 통해

더 효율적으로 테스트를 할 수 있다.

 

그러므로 NodeJS 뿐만 아니라 Javascript 등을 개발할 때 이번 강의에서 사용한 jest, supertest와

그 외의 테스트 관련 framework를 활용하여 테스트 코드를 작성해보길 바란다.

(물론 나도 아직은 많은 연습이 필요해보인다.)

 


 

[오늘의 학습통계]

패스트캠퍼스 작심 30일 챌린지 29일차 학습통계

 


- 패스트캠퍼스 URL : https://bit.ly/37BpXiC

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.