지표 설명
•
% 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
복사