[TDD]Express + Supertest + jest

Dev Cho·2020년 5월 13일
4

[MiniProject]

목록 보기
1/1

홈트 프로젝트에 TDD 를 적용하기로 했다. 지금까지는 테스트 코드가 잘 적용된 repository 를 내 local 로 가져와 그 테스트 코드를 통과하기 위해 노력했다면 이제는 직접 테스트 코드를 작성 및 통과할 수 있도록 코드를 작성해야 한다. 사실 혼자서 TDD 설정을 하기 위해서 구글링을 하고 잘 작성된 테스트 코드를 참고하면서 진행을 했음에도 쉽지 않았다. 아직 익숙치 않아서 그렇다고 생각하고 앞으로 자주 사용하다 보면 잘 적용할 것이라고 생각하자. ㅎ

먼저 아래의 두 모듈을 설치 후

npm i -D jest supertest

package.json 안에 test script 를 추가해준다.

"scripts": {
  ...
  "test": "jest"
  ...
}

test 폴더를 작성 후 user.test.js 파일을 하나 만들어 준다. user API 를 간단하게 테스트 하고 싶어서 일단 user.test.js 하나만 만들었다.

user.test.js

const request = require('supertest');
const app = require('../index');

describe('Go Fit Server API TEST', () => {
  test('should test that true === true', () => {
    expect(true).toBe(true)
  })

  test('should create a new daylog', async (done) => {
    const response = await request(app)
    .post('/api/daylog').send({
      userId: 1,
      title: 'test is cool',
    })
    expect(response.status).toEqual(200)
  })
})

daylog.js

const express = require('express');
const db = require('../models');

const router = express.Router();

router.post('/', async (req, res, next) => {
  try {
    ...
    ...
    res.send(200);
  } catch (e) {
    console.error(e);
    next(e);
  }
});

module.exports = router;

위와 같이 작성하고 npm test 를 실행하면 app.address is not a function 에러가 계속 발생했다.
express.js 에서 module.exports = app 한 줄을 추가해주니 테스트가 잘 진행되었다.

다음 문제는 test code 내에 있는 async 함수가 종료되지 않는다. 해결 방법으로 done() 을 추가해보았지만 그래도 종료가 되지 않아서 다른 방법을 더 찾아봐야 할 것 같다.

남들이 보면 별 볼일 없이 생각할 수준의 아주 간단한 TDD 코드 라도 나에겐 아주 값진 경험이었다. 지금껏 말로만 TDD 해봐야지... 해봐야지.. 미루다가 드디어 처음으로 적용해보았으니깐..ㅎㅎ

TDD 를 제대로 사용하고 익히기 위해서는 앞으로 갈 길이 멀지만 그래도 시작이 반이 아닌가? TDD 로 더욱 효율적이고 생산적인 개발을 할 수 있기를 바래본다.

1개의 댓글

comment-user-thumbnail
2021년 9월 9일

안녕하세요. 작성 글 잘봤습니다.
그래서 혹시 종료 안되는 해결법을 찾으셨는지 궁금하네요 ㅎ

답글 달기