테스트 프레임워크를 추가하지 않고 node:test로 끝낸 이유
문제 발생
DB 통합 테스트를 붙이려는데 러너 선택부터 막혔습니다. 프레임워크를 하나 더 넣으면 설정 파일, 트랜스파일 설정, 그 도구의 버전 정책까지 따라옵니다. 이 저장소의 원칙(의존성은 근거와 함께 추가한다)과 부딪혔습니다.
원인 분석
Node에 이미 러너가 있습니다. 문서 설명대로 node:test는 내장 테스트 러너 모듈이고 node --test로 실행합니다. 파일 탐색 규칙도 정해져 있습니다 — **/*.test.{js,mjs,cjs}, **/*-test.*, **/*_test.*, **/test-*.*, **/test.*, **/test/**/* 입니다. TypeScript 파일도 타입 스트리핑으로 그대로 실행됩니다.
작성 방식은 세 가지를 모두 지원합니다 — 동기(던지면 실패), 프로미스(거부되면 실패), 콜백(truthy 오류를 받으면 실패). describe/it은 suite/test의 별칭이고 하위 테스트도 만들 수 있습니다.
실행 플래그 중 둘이 실전에서 중요합니다.
--test-concurrency=<n>— 병렬로 돌릴 테스트 프로세스 수--test-force-exit— 이벤트 루프가 살아 있어도 테스트가 끝나면 프로세스를 종료
해결 방안
- 평범하게 작성합니다. 별도 설정 파일이 없습니다.
import assert from "node:assert/strict";
import test from "node:test";
test("좋아요 중복은 복합 PK가 거부한다", async () => {
await likePost(postId, userId);
await likePost(postId, userId);
assert.equal(await countLikes(postId), 1);
});-
공유 자원을 쓰면 순차 실행으로 고정합니다. 같은 로컬 DB를 쓰는 파일들이 병렬로 돌면 서로의 데이터와 autoincrement id를 사이에 끼워 넣습니다 —
--test-concurrency=1이 그 답입니다. -
커넥션 풀이 프로세스를 붙잡으면
--test-force-exit을 씁니다. 테스트는 끝났는데 종료되지 않는 증상의 원인이 대개 이것입니다. -
탐색 규칙에 걸리는 이름을 헬퍼에 쓰지 않습니다.
test-*.ts로 만든 픽스처 파일이 테스트로 오인됩니다 —fixtures.ts처럼 짓습니다. -
경로 인자를 주지 않습니다. 디렉터리를 넘기면 해석 방식이 달라 실패하는 경우가 있습니다 — 기본 탐색에 맡깁니다.
-
부족해지면 그때 바꿉니다. 스냅샷·브라우저 환경·정교한 목이 실제로 필요해지면 프레임워크 도입을 재검토합니다 — 지금 필요 없는 도구를 미리 들이지 않는 것이 핵심입니다.
댓글0
댓글을 남기려면 로그인이 필요해요. 로그인
아직 댓글이 없어요. 첫 의견을 편하게 남겨 보세요.