jest 모듈을 사용해서 테스트 코드를 작성했다. jest 외에도 mocha 등이 있는데 commonJS 스타일을 유지하면서 작성하기 위해 jest를 사용하기로 했다.
설치
npm install --save-dev jest
실제로 운영에서는 테스트 코드를 작성하지 않기 때문에 개발환경에서만 동작할 수 있도록 설치를 진행한다. 근데 난 잘 모르겠다.
{
"scripts": {
"test": "jest"
}
}
package.json에 test를 jest로 변경한다.
사용법
사실 이건 정확하다고 볼 수는 없지만 테스트 코드는 꼭 성공한 케이스만을 작성하지는 않는다. 여러 케이스를 두고 실패하는 케이스를 적용해야 휴먼 에러를 피할 수 있다고 생각하기 때문이다.
describe('테스트 네임', () => {
beforeEach(() => {
// req, res 정의
})
)
나는 describe 문에 하나의 도메인에 해당하는 함수를 끌고와서 여러 단위 테스트를 작성했다. beforeEach에서는 요청과 응답에 대해 미리 정의를 한다.
res.status().send()
원래 리턴값을 사용하면 이와 같은 형태로 진행하는데 회사에서는 이를 간편화시킨 함수를 사용하다보니 이를 따로 정의했다. 응답값에 대한 것은 공식 문서를 통해 모의화를 진행시킨다.
it('케이스', async () => {
...케이스 별 req 값 초기화
await 서비스단
expect(...)
})
it 내부에서는 각 케이스 별로 어떻게 진행할지 테스트를 진행한다. 이를 테면 req.body에 요청받는 값이 일부 없는 것을 가정했을 때는 실패 케이스를, 모두 정상적으로 받는 성공 케이스 등을 만들면 된다.
describe
가장 먼저 선언부에서 사용되는 함수를 적어두겠다.
mockResolvedValue
실제로 데이터베이스에서 값을 꺼내오는 것이 아닌 꺼내왔다 가정하기 위한 Mocking 함수이다. 더 쉽게 설명하자면 userMapper라는 파일에 findAllUser라는 함수를 만들어 유저의 정보를 가져오는 것이 있다고 가정했을 때, 실제 데이터베이스에 접근하여 이를 가져오는 것이 아닌 userMapper.findAllUser.mockResolvedValue([...]) 이를 통해 호출해서 ... 데이터를 가져온다 라고 생각하면 된다.
중복되는 데이터의 유효성 처리 등에서 사용된다고 보면 된다.
mockReturnValue
이건 이제 응답값에 대해서 정의한다고 보면 된다. 만약 에러코드에 대한 함수를 따로 나눴다면 각각의 객체들을 모두 정의해줘야 한다.
it
이제 케이스별로 사용되는 함수를 적어두겠다.
expect
실제 서비스에 모의화한 객체를 넣고 응답값이 내가 의도한 것과 맞는지 비교하는 함수이다.
toHaveBeenCalledWith
여기서는 이런 함수를 사용한다.
아마 더 많은 함수와 테스트 코드를 작성할 수 있는 것들이 있을텐데 찾아본 결과물은 다음과 같았다.
'javascript > express' 카테고리의 다른 글
마이그레이션 관리 (0) | 2024.09.24 |
---|---|
함수에서 변수를 명시하지 않았는데 할당됐다 (0) | 2024.09.13 |