Mocha를 사용하여 테스트 코드를 작성하다 보면, 각 테스트 파일에서 데이터베이스(DB)에 연결하고 연결을 끊어야 하는 상황이 발생한다. 이러한 경우, 테스트 파일의 수보다 많은 DB 접근과 연결 끊기 작업이 발생할 수 있다. 이 문제를 해결하기 위해 Mocha를 사용하여 테스트 코드를 작성할 때 모든 테스트 전에 DB에 단 한 번 연결하고 모든 테스트 후에 단 한 번 연결을 끊는 방법을 소개한다. 이 예시는 mongoose와 mocha를 사용한다.
Version
Node.js: v16.15.1
npm: 9.6.4
mocha: 9.1.2
mongoose: 6.6.2
typescript: 4.9.3
기존 테스트 코드의 구조 및 코드
- 기존 테스트 폴더의 구조
test/
test1/
test파일들...
test2/
test파일들...
test3/
test파일들...
test4/
test파일들...
test5/
test파일들...
test파일들...
dbConnectionForTest.ts
해결
1. dbConnectionForTest.ts 파일 생성
dbConnectionForTest.ts 파일 생성 test 폴더에 dbConnectionForTest.ts 파일을 생성한다. 이 파일에서 before 함수를 사용하여 테스트를 실행하기 전에 데이터베이스에 연결하고 after 함수를 사용하여 테스트를 실행한 후 데이터베이스 연결을 끊는다.
import mongoose from 'mongoose';
// 테스트를 실행하기 전 실행될 함수 before
before(async () => {
//@ts-ignore
if (!global.mongooseConnection) {
await mongoose.connect(...옵션들)
//@ts-ignore
global.mongooseConnection = mongoose.connection;
}
});
// 테스트를 실행한 후 실행될 함수 after
after(async () => {
//@ts-ignore
if (global.mongooseConnection) {
//@ts-ignore
await global.mongooseConnection.close();
//@ts-ignore
global.mongooseConnection = null;
}
});
before: global 전역변수에 mongooseConnection이라는 변수를 생성한 후 connection을 할당 한다. (없으면 생성 후 할당)
after: global전역변수의 mongooseConnection의 연결을 끊은 후 mongooseConnection를 null로 할당한다.
만약 //@ts-ignore를 사용하기 싫다면 global.d.ts 파일을 작성해주어야 한다.
2. import문으로 해당 파일 불러와서 적용
이 방식을 사용하면 각 파일에서 아래 예시처럼 사용할 수 있어서 단일 파일에 대한 테스트도 가능하다.
// import "dbConnectionForTest.ts 가 생성된 경로"
import "../dbConnectionForTest"
describe('Test', () => {
//... 테스트 코드들
});
db접근이 일어나는 모든 테스트 파일에 위 import문을 적용후 저장한다.
3. test 실행 스크립트 수정
기존에 실행하던 test 스크립트를 --file 명령어를 사용해서 수정해준다.
이렇게 하면 테스트 실행 시 데이터베이스에 대한 접근이 단 한 번만 발생하고 모든 테스트가 완료된 후 연결이 끊어진다.
// 기존 테스트 실행 명령어
"test": "mocha --timeout 80000 --require ts-node/register test/**/*.ts",
// 변경된 테스트 실행 명령어
"test": "mocha --timeout 80000 --file test/db-connection.ts --require ts-node/register test/**/*.ts",
이 방법을 사용하면 Mocha를 이용한 테스트 코드 작성 시 데이터베이스 접근을 최소화할 수 있다.
이를 통해 테스트의 성능과 안정성을 높일 수 있다. 이러한 방법을 적용함으로써 각 테스트 파일에서 반복되는 DB 연결 및 연결 해제 작업을 줄이고, 테스트를 더 효율적으로 수행할 수 있게 된다. Mocha와 mongoose를 사용한 테스트 작성 시 이러한 최적화 기법을 활용하여 테스트 코드의 품질을 높이고, 테스트 작성 및 유지 관리에 드는 노력을 줄일 수 있다.
'Programming > Node.js' 카테고리의 다른 글
[Node.js] 자주 발생하는 TypeError 해결하기: 'Cannot read property of undefined' (0) | 2023.05.02 |
---|---|
[Node.js] NPM에서 NODE_ENV와 DevDependencies 이해하기 (0) | 2023.04.29 |
[Node.js] DeprecationWarning: Buffer() is deprecated due to security and usability issues... 에러 (0) | 2022.12.13 |
[Node.js] Error: bind EADDRINUSE null:80 (0) | 2022.12.08 |
[Node.js] node.js에서 메모리 사용량을 확인하는 방법 (0) | 2022.11.29 |