NestJS 로 진행 중인 프로젝트에서 Layer 테스트 코드를 작성하였다. 전체적으로 테스트를 돌리던 중에 다음 에러가 발생했다.
특정 테스트에서 기본 설정된 timeout 을 넘겨서 발생한 에러인 것 같다. package.json 에서 테스트 스크립트에 timeout 을 넉넉하게 설정했다.
"scripts": {
...
"test": "jest --testTimeout=10000",
...
},
timeout 관련 에러는 해결되었지만 테스트가 불규칙하게 실패하고 다음과 같이 데이터베이스 관련 에러가 보였다.
현재 리포지토리 테스트는 직접 데이터베이스와 연동하여 테스트하고 있었고, 테스트마다 데이터베이스를 drop 하고 있었다.
테스트는 병렬적으로 실행되는데 테스트 코드에는 데이터베이스를 초기화하고 데이터를 넣고, 삭제하는 작업이 있어 데이터베이스 싱크가 맞지 않아 불규칙하게 실패했던 것이다.
"scripts": {
...
"test": "jest --testTimeout=10000 --runInBand",
...
다음과 같이 test scripts 에 --runInBand 옵션을 넣어주었다. 해당 옵션은 테스트를 실행하는 하위 프로세스의 작업자 풀을 만들지 않고 현재 프로세스에서 모든 테스트를 순차적으로 실행한다. 때문에 더 이상 데이터베이스 싱크가 맞지 않아 테스트가 실패하지 않았다.
이제 테스트가 정상적으로 작동했다.
Reference
https://bobbyhadz.com/blog/jest-exceeded-timeout-of-5000-ms-for-test
https://runebook.dev/ko/docs/jest/cli