Search

nestJS 프로젝트 테스트(Jest)

생성일
2025/04/08 09:03
태그
AI 요약
날짜
상위 항목
하위 항목

지표 설명

% Stmts (Statements - 구문 커버리지):
의미: 소스 코드 내에 있는 실행 가능한 구문(Statement) 중에서 테스트 중에 최소 한 번 이상 실행된 구문의 비율을 나타냅니다.
구문(Statement)이란? 코드를 실행하는 가장 작은 단위입니다. 예를 들어 변수 할당 (let a = 1;), 함수 호출 (doSomething();), return, throw, if, while, for 등이 각각의 구문이 될 수 있습니다.
예시: 코드 파일에 실행 가능한 구문이 10개 있고, 테스트 실행 시 그중 8개가 실행되었다면 구문 커버리지는 80%입니다.
% Branch (Branches - 분기 커버리지):
의미: 코드 내의 모든 제어 흐름 분기(Branch) 중에서 테스트 중에 최소 한 번 이상 실행된 분기의 비율을 나타냅니다.
분기(Branch)란? if/else, switch, 삼항 연산자 (? :), 논리 연산자(&&, ||의 단축 평가) 등 코드의 실행 흐름이 갈라지는 지점에서 발생하는 가능한 모든 경로를 의미합니다. 예를 들어 if (condition) 문은 condition이 참인 경우와 거짓인 경우의 두 가지 분기를 가집니다 (else가 없어도 거짓인 경우가 분기입니다).
중요성: 구문이나 라인 커버리지가 100%라도 분기 커버리지는 100%가 아닐 수 있습니다. 예를 들어 if 문의 참 경로만 테스트했다면 해당 라인은 커버되었지만 거짓 경로는 테스트되지 않아 분기 커버리지는 낮을 수 있습니다. 일반적으로 분기 커버리지가 더 엄격하고 중요한 지표로 간주됩니다.
예시: if/else 문이 있고 (총 2개의 분기), 테스트가 if 경로만 실행했다면 해당 부분의 분기 커버리지는 50%입니다.
% Funcs (Functions - 함수 커버리지):
의미: 소스 코드 내에 정의된 모든 함수(또는 메소드) 중에서 테스트 중에 최소 한 번 이상 호출된 함수의 비율을 나타냅니다.
함수(Function)란? function, 클래스 메소드, 화살표 함수 등을 포함하여 코드 블록을 정의하는 모든 단위를 의미합니다.
예시: 코드 파일에 5개의 함수가 정의되어 있고, 테스트 실행 시 그중 4개가 호출되었다면 함수 커버리지는 80%입니다.
% Lines (Lines - 라인 커버리지):
의미: 소스 코드 내의 실행 가능한 코드 라인 중에서 테스트 중에 최소 한 번 이상 실행된 라인의 비율을 나타냅니다.
라인(Line)이란? 일반적으로 주석이나 빈 줄을 제외하고, 실행 코드가 포함된 소스 코드의 각 줄을 의미합니다.
구문 커버리지와의 관계: 라인 커버리지는 구문 커버리지와 매우 유사하지만 약간 다를 수 있습니다. 한 라인에 여러 구문이 있거나 한 구문이 여러 라인에 걸쳐 있을 수 있기 때문입니다. 보통은 둘 다 비슷한 경향을 보입니다.
예시: 코드 파일에 실행 가능한 라인이 20줄 있고, 테스트 실행 시 그중 18줄이 실행되었다면 라인 커버리지는 90%입니다.

jest script

npx jest --clearCache Cleared /private/var/folders/dy/7vz66w9d7g77_16xbp9qfmtm0000gn/T/jest_dx jest --detectOpenHandles --coverage --watchAll
JavaScript
복사

jest.config.js

// jest.config.js (프로젝트 루트에 위치) module.exports = { moduleDirectories: ['node_modules'], moduleFileExtensions: ['js', 'json', 'ts'], testMatch: ['<rootDir>/test/unit/**/*.spec.ts'], rootDir: '.', // testRegex: '.spec.ts$', transform: { '^.+\\.(t|j)s$': 'ts-jest', }, testTimeout: 10000, preset: 'ts-jest', coverageDirectory: '<rootDir>/coverage/unit', coverageReporters: ['text', 'html', 'lcov'], collectCoverage: true, collectCoverageFrom: [ '<rootDir>/src/repair-shop-management/**/*.ts', '!**/*.module.ts', '!**/*.dto.ts', '!**/*.entity.ts', '!**/*.controller.ts', '!**/*.repository.ts', '!**/*.constants.ts', ], testEnvironment: 'node', moduleNameMapper: { '^src/(.*)': '<rootDir>/src/$1', '^test/(.*)': '<rootDir>/test/$1', '^metadata/(.*)': '<rootDir>/metadata/$1', '^envs/(.*)': '<rootDir>/envs/$1', '^package.json': '<rootDir>/../package.json', }, globals: { 'ts-jest': { tsconfig: '<rootDir>/tsconfig.json', diagnostics: { // ignoreCodes: [], // warnOnly: true, }, }, }, };
JavaScript
복사