홈트 프로젝트에 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 하나만 만들었다.
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)
})
})
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 로 더욱 효율적이고 생산적인 개발을 할 수 있기를 바래본다.
안녕하세요. 작성 글 잘봤습니다.
그래서 혹시 종료 안되는 해결법을 찾으셨는지 궁금하네요 ㅎ