C - Conformance (μ€μ)
O - Ordering (μμ)
R - Range (λ²μ)
R - Reference (μ°Έμ‘°)
E - Existence (μ‘΄μ¬)
C - Cardinality (κ°μ)
T - Time (μκ°)
ν μ€νΈλ νμ€, νμ, λͺ μΈ λ±μ μ λ°λ₯΄κ³ μλμ§ νμΈνλ€. μλ₯Ό λ€μ΄, μ΄λ©μΌ μ£Όμλ μ νλ²νΈ νμμ μ λλ‘ μ€μνλμ§ ν μ€νΈνλ€.
const { validatePhoneNumber } = require('./phoneValidation');
describe('Phone Number Validation Tests', () => {
test('should conform to phone number format', () => {
expect(validatePhoneNumber('+12345678900')).toBeTruthy();
expect(validatePhoneNumber('invalid-phone')).toBeFalsy();
});
});
// phoneValidation.js
function validatePhoneNumber(phone) {
const re = /^\+\d{11}$/;
return re.test(phone);
}
module.exports = { validatePhoneNumber };
validatePhoneNumber
ν¨μμ λν ν
μ€νΈλ₯Ό 보μ¬μ€λ€. μ¬λ°λ₯Έ νμμ μ νλ²νΈ ('+12345678900')
μ μλͺ»λ νμ ('invalid-phone')
μ λν κ²μ¦μ μνν¨μΌλ‘μ¨, μ νλ²νΈμ μ νν νμμ μ¬λ°λ₯΄κ² μ€μνλμ§ νμΈνλ€. μ΄μ²λΌ λͺ
μΈμ νμ€μ μ€μνλ ν
μ€νΈλ μννΈμ¨μ΄κ° μΈλΆ μμ€ν
κ³Ό μ ν΅ν©λ μ μλλ‘ λ³΄μ₯νλ€.ν μ€νΈλ λ°μ΄ν°λ μ΄λ²€νΈμ μμκ° μ€μν λ κ·Έ μμλ₯Ό μ μ§ν€κ³ μλμ§ νμΈνλ€. μλ₯Ό λ€μ΄, κ±°λ λ΄μμ΄ μ¬λ°λ₯Έ μμλλ‘ μ μ₯λλμ§, νλ‘μΈμ€ λ¨κ³κ° μ¬λ°λ₯Έ μμλ‘ μ§νλλμ§ λ±μ μ΄νλ€.
const { processSteps } = require('./processManager');
describe('Process Ordering Tests', () => {
test('should follow the correct order of process steps', () => {
const stepsOrder = processSteps();
expect(stepsOrder).toEqual(['Step1', 'Step2', 'Step3']);
});
});
// processManager.js
function processSteps() {
// νλ‘μΈμ€ λ¨κ³ μ€ν λ‘μ§
return ['Step1', 'Step2', 'Step3']; // μμλ₯Ό μν λ¨μνλ μμ
}
module.exports = { processSteps };
processSteps
ν¨μμ λν ν
μ€νΈλ₯Ό λνλΈλ€. 'Step1', 'Step2', 'Step3' μμλ‘ μ§νλλμ§ κ²μ¦ν¨μΌλ‘μ¨, νλ‘μΈμ€μ μμκ° μ¬λ°λ₯΄κ² μ μ§λκ³ μλμ§ νμΈνλ€. μ΄λ¬ν μμμ μ νμ±μ κ²μ¦νλ ν
μ€νΈλ 볡μ‘ν μν¬νλ‘μ°μ νλ‘μΈμ€κ° μ¬λ°λ₯΄κ² κ΄λ¦¬λκ³ μμμ 보μ₯νλ€.ν μ€νΈλ μ λ ₯μ΄λ μΆλ ₯ κ°μ λ²μλ₯Ό κ²μ¬νλ€. μλ₯Ό λ€μ΄, λμ΄ μ λ ₯ νλκ° 0μμ 120 μ¬μ΄μ κ°μ λ°λμ§, κ³μ° κ²°κ³Όκ° νΉμ λ²μ λ΄μ μλμ§ λ±μ νμΈνλ€.
const { calculateInterest } = require('./financialCalculator');
describe('Interest Calculation Range Tests', () => {
test('should return interest within valid range', () => {
const interest = calculateInterest(1000, 5);
expect(interest).toBeGreaterThanOrEqual(50);
expect(interest).toBeLessThanOrEqual(150);
});
});
// financialCalculator.js
function calculateInterest(principal, rate) {
// 볡리 κ³μ°μ μν κ°λ¨ν λ‘μ§ μμ
return principal * (rate / 100);
}
module.exports = { calculateInterest };
calculateInterest
ν¨μμ λν ν
μ€νΈλ₯Ό λνλΈλ€. μκΈμ‘ 1000μ λν΄ μ΄μμ¨ 5%κ° μ μ©λμμ λ, κ³μ°λ μ΄μκ° 50 μ΄μ 150 μ΄νμΈμ§ κ²μ¦ν¨μΌλ‘μ¨, μ΄μ κ³μ°μ΄ ν©λ¦¬μ μΈ λ²μ λ΄μμ μ΄λ£¨μ΄μ§κ³ μλμ§ νμΈνλ€. μ΄μ²λΌ λ²μλ₯Ό κ²μ¦νλ ν
μ€νΈλ μ
λ ₯κ³Ό μΆλ ₯ κ°μ΄ μμ κ°λ₯ν λ²μ λ΄μμ μ ννκ² μ²λ¦¬λκ³ μμμ 보μ₯νλ€.ν μ€νΈλ μΈλΆ μμ€ν μ΄λ λͺ¨λμ λν μ°Έμ‘°κ° μ¬λ°λ₯΄κ² μ΄λ£¨μ΄μ§κ³ μλμ§ νμΈνλ€. μλ₯Ό λ€μ΄, λ°μ΄ν°λ² μ΄μ€ μ°κ²°, νμΌ μμ€ν μ κ·Ό λ± μΈλΆ μμμ μ°Έμ‘°λ₯Ό νμΈνλ€.
const { readConfig } = require('./configReader');
describe('Config File Reference Tests', () => {
test('should correctly reference and read the config file', () => {
const config = readConfig('/path/to/config.json');
expect(config).toHaveProperty('databaseUrl');
});
});
// configReader.js
const fs = require('fs');
function readConfig(filePath) {
try {
const rawData = fs.readFileSync(filePath);
return JSON.parse(rawData);
} catch (error) {
throw new Error('Unable to read config file');
}
}
module.exports = { readConfig };
readConfig
ν¨μμ λν ν
μ€νΈλ₯Ό 보μ¬μ€λ€. νΉν, κ΅¬μ± νμΌμ΄ databaseUrl μμ±μ ν¬ν¨νκ³ μλμ§ νμΈν¨μΌλ‘μ¨, μΈλΆ νμΌμ λν μ°Έμ‘°μ λ°μ΄ν° μ½κΈ° κ³Όμ μ΄ μ μμ μΌλ‘ μ΄λ£¨μ΄μ§κ³ μλμ§ κ²μ¦νλ€. μ΄μ²λΌ μ°Έμ‘°λ₯Ό κ²μ¦νλ ν
μ€νΈλ μννΈμ¨μ΄κ° μΈλΆ μμμ μ ννκ² λ€λ£¨κ³ μμμ νμΈνλ€.ν μ€νΈλ νμν κ°, λ³μ, νμΌ, λ°μ΄ν° λ±μ΄ μ€μ λ‘ μ‘΄μ¬νλμ§ νμΈνλ€. μλ₯Ό λ€μ΄, νμν νμΌμ΄ λλ ν 리μ μ‘΄μ¬νλμ§, νμ λ°μ΄ν° νλκ° λΉμ΄ μμ§ μμμ§ λ±μ κ²μ¬νλ€.
const fs = require('fs');
const { expect } = require('chai');
describe('File Existence Tests', () => {
it('should confirm that the required file exists', () => {
const filePath = './data/users.json';
const fileExists = fs.existsSync(filePath);
expect(fileExists).to.be.true;
});
});
// data/users.json
// {
// "users": [...]
// }
users.json
νμΌμ΄ μ€μ λ‘ μ‘΄μ¬νλμ§λ₯Ό κ²μ¬νλ€. νμΌμ μ‘΄μ¬ μ¬λΆλ₯Ό νμΈν¨μΌλ‘μ¨, μ ν리μΌμ΄μ
μ΄ νμν λ°μ΄ν°μ μ κ·Όν μ μλμ§ κ²μ¦νλ€. μ‘΄μ¬μ±μ νμΈνλ ν
μ€νΈλ μ ν리μΌμ΄μ
μ μμ μ±κ³Ό λ°μ΄ν° 무결μ±μ 보μ₯νλ λ° μ€μν μν μ νλ€.ν μ€νΈλ μ½λ μ μ΄λ κ·Έλ£Ή λ΄μ μμ κ°μκ° μ ννκ³ μ μ νμ§ νμΈνλ€. μλ₯Ό λ€μ΄, μ¬μ©μ λͺ©λ‘μμ 100λͺ μ μ¬μ©μκ° μ€λ³΅ μμ΄ μλμ§ λ±μ κ²μ¦νλ€.
const { getUserCount } = require('./userManagement');
describe('User Count Validation Tests', () => {
test('should have correct number of users without duplication', () => {
const users = [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" },
// ... κΈ°ν μ¬μ©μ
{ id: 100, name: "Zoe" }
];
expect(getUserCount(users)).toBe(100);
});
});
// userManagement.js
function getUserCount(users) {
const uniqueUsers = new Set(users.map(user => user.id));
return uniqueUsers.size;
}
module.exports = { getUserCount };
getUserCount
ν¨μμ λν ν
μ€νΈλ₯Ό 보μ¬μ€λ€. Set
κ°μ²΄λ₯Ό μ¬μ©νμ¬ μ€λ³΅λ μ¬μ©μ IDλ₯Ό μ κ±°νκ³ , κ²°κ³Όμ μΌλ‘ μ μΌν μ¬μ©μμ μλ₯Ό λ°ννλ€. μ΄λ° μμΌλ‘ μμμ κ°μλ₯Ό μ ννκ² κ΄λ¦¬νλ ν
μ€νΈλ λ°μ΄ν°μ μ νμ±κ³Ό μ λ’°μ±μ 보μ₯νλ€.ν μ€νΈλ μ²λ¦¬ μκ°, μλ΅ μκ°, μ΄λ²€νΈ μμ λ± μκ°κ³Ό κ΄λ ¨λ μμ±λ€μ΄ κΈ°λμΉλ₯Ό λ§μ‘±νλμ§ νμΈνλ€. μλ₯Ό λ€μ΄, λ°μ΄ν° μ²λ¦¬μ μμλλ μκ°μ΄λ μΊμ λ§λ£ μκ°μ κ²μ¦νλ€.
const { processData } = require('./dataProcessor');
describe('Data Processing Time Tests', () => {
test('should process data within acceptable time limit', () => {
const startTime = performance.now();
processData(largeDataSet);
const endTime = performance.now();
const processingTime = endTime - startTime;
expect(processingTime).toBeLessThan(1000); // μμ μ²λ¦¬ μκ° 1μ΄ λ―Έλ§
});
});
// dataProcessor.js
function processData(data) {
// 볡μ‘ν λ°μ΄ν° μ²λ¦¬ λ‘μ§
}
module.exports = { processData };
processData
ν¨μμ λν ν
μ€νΈλ₯Ό 보μ¬μ€λ€. μ±λ₯μ΄ μ€μν μ ν리μΌμ΄μ
μμλ μ΄λ¬ν μκ° κΈ°λ° ν
μ€νΈλ₯Ό ν΅ν΄ μ¬μ©μ κ²½νμ ν₯μμν€κ³ μμ€ν
μ ν¨μ¨μ±μ 보μ₯νλ€.