단위 테스트는 소프트웨어 개발에서 가장 작은 단위의 테스트를 의미하며, 테스트 주도 개발(TDD)의 핵심 방법론입니다.
TDD 기본 개념 도식:
이미지: [TDD 사이클: 실패하는 테스트 작성 → 최소한의 코드로 통과 → 리팩토링] 반복 과정
Node.js 환경에서 널리 사용되는 테스트 도구:
기본 사용법:
실행 결과로 생성된 HTML 보고서를 통해 특정 조건:
- 라인 커버리지
- 분기 커버리지
값을 시각적으로 확인 가능합니다.
1. Mocha 프레임워크
Mocha는 Node.js와 브라우저 환경에서 동작하는 JavaScript 테스트 프레임워크로, 비동기 테스트를 간편하게 지원합니다. 명확한 테스트 구조와 직관적인 보고 기능을 제공합니다. 설치:npm install -g mochaconst 검증 = require("assert");
describe('배열 기능', () => {
context('#indexOf() 메서드', () => {
it('존재하지 않는 요소 검색 시 -1 반환', () => {
검증.strictEqual([1,2,3].indexOf(5), -1);
검증.strictEqual([1,2,3].indexOf(0), -1);
});
});
});2. Should 라이브러리
선언적 스타일의 테스트 작성을 지원합니다.require("should");
const 사용자명 = "현택";
describe('사용자 정보', () => {
it('사용자명은 "현택"이어야 함', () => {
사용자명.should.equal("현택");
});
});
class 사용자 {
constructor(이름) {
this.이름 = 이름;
}
}
const 사용자1 = new 사용자(사용자명);
describe('객체 타입 검증', () => {
it('사용자1은 사용자 클래스 인스턴스', () => {
사용자1.should.be.instanceOf(사용자);
});
it('사용자1은 Object 인스턴스', () => {
사용자1.should.be.instanceOf(Object);
});
});
describe('속성 존재 여부', () => {
it('사용자1은 이름 속성 보유', () => {
사용자1.should.have.property("이름");
});
});3. SuperTest 모듈
HTTP API 테스트 전용 도구입니다.const 요청 = require('supertest');
const express = require('express');
const 앱 = express();
앱.get('/사용자', (req, res) => {
res.status(200).json({ 이름: '태호' });
});
요청(앱)
.get('/사용자')
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) => {
if (err) throw err;
});4. Istanbul 커버리지 도구
코드 검증 범위 분석 도구입니다.istanbul cover 테스트_파일.js