ê°ì§ ê·ì¹ì ì¬ì©íì¬ CSS í ì€ížë¥Œ ë§ì€í°íìžì. ìŽ ê°ìŽëììë CSS í ì€íž ëëž, ì¥ì , 구í, ê°ë ¥íê³ ì ì§ êŽëЬ ê°ë¥í ì€íìŒìížë¥Œ ìí ëªšë² ì¬ë¡ë¥Œ ë€ë£¹ëë€.
CSS ê°ì§ ê·ì¹: CSS í ì€íž ëëžì ì¬ì©í ê°ë ¥í í ì€íž
Cascading Style Sheets (CSS)륌 í ì€ížíë ê²ì ì¹ ê°ë°ì ìŽë µì§ë§ íìì ìž ìž¡ë©ŽìŒ ì ììµëë€. Ʞ졎 í ì€íž ë°©ë²ë¡ ì CSS ìœë륌 격늬íê³ ëìì íšê³Œì ìŒë¡ íìžíë ë° ìŽë €ìì 겪ë 겜ì°ê° ë§ìµëë€. ìŽ ê²œì° "CSS ê°ì§ ê·ì¹", ë³Žë€ ì ííê²ë CSS í ì€íž ëëžìŽëŒë ê°ë ìŽ ë±ì¥í©ëë€. ìŽ ë¬žìììë í ì€íž ëëžì ì¬ì©íì¬ CSS륌 í ì€ížíë ìžê³ë¥Œ ììží ìŽíŽë³Žê³ , ì¥ì , 구í êž°ì , ë€ìí ëžëŒì°ì ë° ì¥ì¹ìì ê°ë ¥íê³ ì ì§ êŽëЬ ê°ë¥í ì€íìŒìížë¥Œ ë§ë€êž° ìí ëªšë² ì¬ë¡ë¥Œ ìŽíŽëŽ ëë€.
CSS í ì€íž ëëžìŽë 묎ììžê°ì?
ìíížìšìŽ í ì€ížìì í ì€íž ëëžì í ì€íž ì€ì ì€ì ê°ì²Žë¥Œ ëì íë 몚ë ê°ì²Žë¥Œ ëíëŽë ìŒë°ì ìž ì©ìŽì ëë€. í ì€íž ëëžì ì¬ì©íë 목ì ì í ì€íž ëì ì ëì 격늬íê³ ì¢ ìì±ì ì ìŽíì¬ í ì€ížë¥Œ ë³Žë€ ììž¡ ê°ë¥íê³ ì§ì€ì ìŒë¡ ë§ëë ê²ì ëë€. CSSì 컚í ì€ížìì í ì€íž ëëž(ížìì "CSS ê°ì§ ê·ì¹"ìŽëŒê³ ë¶ëŠ)ì ì€ì CSS ê·ì¹ ëë ëìì 몚방íë ìžê³µ CSS ê·ì¹ ëë ëìì ë§ëë êž°ì ë¡, ì€ì ë ëë§ ìì§ìŽë ìžë¶ ì€íìŒìížì ì졎íì§ ìê³ JavaScript ëë êž°í íë°ížìë ìœëê° ììëë¡ CSSì ìíž ìì©íëì§ íìží ì ììµëë€.
볞ì§ì ìŒë¡, êµ¬ì± ìì ìíž ìì©ì í ì€ížíê³ í ì€íž ì€ì ìœë륌 격늬íêž° ìíŽ ìì±ë ì뮬ë ìŽì ë CSS ëìì ëë€. ìŽ ì ê·Œ ë°©ìì íµíŽ í¹ì CSS ì€íìŒ ëë ëìì ì졎íë JavaScript êµ¬ì± ìì ëë êž°í íë°ížìë ìœëì ëí ì§ì€ì ìž ì ë í ì€ížê° ê°ë¥í©ëë€.
CSS í ì€íž ëëžì ì¬ì©íë ìŽì ë 묎ììžê°ì?
CSS í ì€íž ëëžì í ì€íž ì ëµì íµí©í멎 ëª ê°ì§ 죌ì ìŽì ìŽ ììµëë€.
- 격늬: í ì€íž ëëžì ì¬ì©í멎 í ì€íž ì€ìž ìœë륌 ëžëŒì°ì ë ëë§ ìì§ ë° ìžë¶ CSS ì€íìŒìížì ë³µì¡ì±ìŒë¡ë¶í° 격늬í ì ììµëë€. ìŽë ê² í멎 í ì€ížê° ëì± ì§ì€ëê³ ìžë¶ ììžìŒë¡ ìží ì못ë ìì± ëë ìì± ê²°ê³Œê° ë°ìí ê°ë¥ì±ìŽ ì€ìŽëëë€.
- ìë: ì€ì ëžëŒì°ì ë ëë§ì ëíŽ í ì€ížë¥Œ ì€ííë ê²ì ëëŠ¬ê³ ëŠ¬ìì€ë¥Œ ë§ìŽ ì¬ì©í ì ììµëë€. í ì€íž ëëžì ê°ë²ŒìŽ ì뮬ë ìŽì ìŽêž° ë묞ì í ì€íž ì€ìíž ì€í ìë륌 í¬ê² ëì ëë€.
- ììž¡ ê°ë¥ì±: ëžëŒì°ì ì ë¶ìŒì¹ ë° ìžë¶ ì€íìŒìíž ë³ê²œìŒë¡ ìžíŽ í ì€ížê° ì 뢰í ì ìê² ë ì ììµëë€. í ì€íž ëëžì ìŒêŽëê³ ììž¡ ê°ë¥í í겜ì ì ê³µíì¬ í ì€íž ëì ìœëì ë²ê·žê° ìë 겜ì°ìë§ í ì€ížê° ì€íšíëë¡ í©ëë€.
- ì ìŽ: í ì€íž ëëžì ì¬ì©í멎 CSS í겜ì ìí륌 ì ìŽíì¬ ì€ì ëžëŒì°ì í겜ìì ì¬ííêž° ìŽë µê±°ë ë¶ê°ë¥í ì ìë ë€ìí ìëëŠ¬ì€ ë° ìì§ ìŒìŽì€ë¥Œ í ì€íží ì ììµëë€.
- ìŽêž° ì€ë¥ ê°ì§: CSS ëìì ì뮬ë ìŽì íì¬ ê°ë° íë¡ìžì€ ìŽêž°ì CSSìì íë°ížìë ìœë ìíž ìì©ê³Œ êŽë šë 묞ì 륌 ìë³í ì ììµëë€. ìŽë ê² í멎 ë²ê·žê° íë¡ëì ìŒë¡ ì ì ëë ê²ì ë°©ì§íê³ ëë²ê¹ ìê°ì ì€ìŒ ì ììµëë€.
CSS í ì€íž ëëžì ì í
"CSS ê°ì§ ê·ì¹"ìŽëŒë ì©ìŽê° êŽë²ìíê² ì¬ì©ëì§ë§, CSS í ì€ížìì ë€ìí ì íì í ì€íž ëëžì ì¬ì©í ì ììµëë€.
- ì€í : ì€í ì í ì€íž ì€ì ížì¶ë ížì¶ì ëí ì€ë¹ë ëµë³ì ì ê³µí©ëë€. CSS í ì€ížìì ì€í ì ížì¶ ì 믞늬 ì ìë CSS ìì± ê°ì ë°ííë íšììŒ ì ììµëë€. ì륌 ë€ìŽ, ì€í ì ììì `margin-left` ìì±ì ìì²í ë `20px`륌 ë°íí ì ììµëë€.
- 몚ì: 몚ìë ì€í ë³Žë€ ë ì êµí©ëë€. í¹ì ìžì륌 ì¬ì©íì¬ í¹ì ë©ìëê° ížì¶ëìëì§ íìží ì ììµëë€. CSS í ì€ížìì 몚ìë JavaScript íšìê° ë²íŒì íŽëŠí ë ììì `display` ìì±ì `none`ìŒë¡ ì¬ë°ë¥Žê² ì€ì íëì§ íìžíë ë° ì¬ì©ë ì ììµëë€.
- ê°ì§: ê°ì§ë ìëíë 구íìŽì§ë§ ìŒë°ì ìŒë¡ íë¡ëì ì ì í©íì§ ìì ëª ê°ì§ ë°ë¡ ê°êž°ë¥Œ ì¬ì©í©ëë€. CSS í ì€ížìì ìŽë CSS êž°ë¥ì íì ì§í©ë§ ì²ëЬíë ëšìíë CSS íì ëë CSS ë ìŽìì ëìì ì뮬ë ìŽì íë ë믞 ìììŒ ì ììµëë€.
- ì€íìŽ: ì€íìŽë íšì ëë ë©ìëê° ížì¶ë ë°©ìì ëí ì 볎륌 êž°ë¡í©ëë€. CSS í ì€ížìì ì€íìŽë í ì€íž ì€ì í¹ì CSS ìì±ì ëª ë²ìŽë ì¡ìžì€íê±°ë ìì íëì§ ì¶ì íë ë° ì¬ì©ë ì ììµëë€.
구í êž°ì
CSS í ì€íž ëëžì 구ííë ë° ì¬ì©í ì ìë ëª ê°ì§ êž°ì ìŽ ììŒë©°, ìŽë í ì€íž íë ììí¬ ë° í ì€íž ì€ìž CSSì ë³µì¡ì±ì ë°ëŒ ë€ëŠ ëë€.
1. JavaScript êž°ë° ëªšì
ìŽ ì ê·Œ ë°©ìì JavaScript 몚ì ëŒìŽëžë¬ëЬ(ì: Jest, Mocha, Sinon.JS)륌 ì¬ì©íì¬ CSS êŽë š íšì ëë ë©ìë륌 ê°ë¡ì±ê³ ì¡°ìíë ê²ì í¬íší©ëë€. ì륌 ë€ìŽ `getComputedStyle` ë©ìë륌 몚ìíì¬ ë¯žëŠ¬ ì ìë CSS ìì± ê°ì ë°íí ì ììµëë€. ìŽ ë©ìëë ëžëŒì°ì ê° ì€íìŒì ì ì©í í ììì ì€íìŒ ê°ì ê²ìíêž° ìíŽ JavaScript ìœëìì ìŒë°ì ìŒë¡ ì¬ì©ë©ëë€.
ìì(Jest ì¬ì©):
const element = document.createElement('div');
const mockGetComputedStyle = jest.fn().mockReturnValue({
marginLeft: '20px',
backgroundColor: 'red',
});
global.getComputedStyle = mockGetComputedStyle;
// Now, when JavaScript code calls getComputedStyle(element), it will receive the mocked values.
//Test example
expect(getComputedStyle(element).marginLeft).toBe('20px');
expect(getComputedStyle(element).backgroundColor).toBe('red');
ì€ëª :
- `jest.fn()`ì ì¬ì©íì¬ ëªšì íšì `mockGetComputedStyle`ì ë§ëëë€.
- `mockReturnValue`륌 ì¬ì©íì¬ ížì¶ ì 몚ì íšìê° ë°ííŽìŒ íë ê°ì ì§ì í©ëë€. ìŽ ê²œì° ë¯žëŠ¬ ì ìë `marginLeft` ë° `backgroundColor` ìì±ì ì¬ì©íì¬ `getComputedStyle`ì ë°í ê°ì 몚방íë ê°ì²Žë¥Œ ë°íí©ëë€.
- ì ì `getComputedStyle` íšì륌 몚ì íšìë¡ ë°ê¿ëë€. ìŽë ê² í멎 í ì€íž ì€ì `getComputedStyle`ì ížì¶íë 몚ë JavaScript ìœëê° ì€ì ë¡ ëì 몚ì íšì륌 ížì¶íê² ë©ëë€.
- ë§ì§ë§ìŒë¡, `getComputedStyle(element).marginLeft` ë° `getComputedStyle(element).backgroundColor`륌 ížì¶í멎 몚ì ê°ìŽ ë°íëëì§ ìŽì€ì í©ëë€.
2. CSS íì± ë° ì¡°ì ëŒìŽëžë¬ëЬ
PostCSS ëë CSSOM곌 ê°ì ëŒìŽëžë¬ëŠ¬ë¥Œ ì¬ì©íì¬ CSS ì€íìŒìížë¥Œ íì±íê³ CSS ê·ì¹ì ìž ë©ëªšëЬ ííì ë§ë€ ì ììµëë€. ê·žë° ë€ì ìŽë¬í ííì ì¡°ìíì¬ ë€ìí CSS ìí륌 ì뮬ë ìŽì íê³ ìœëê° ì¬ë°ë¥Žê² ìëµíëì§ íìží ì ììµëë€. ìŽë ì€íìŒìŽ JavaScriptì ìíŽ ì¶ê°ëê±°ë ìì ëë ëì CSSìì ìíž ìì©ì í ì€ížíë ë° í¹í ì ì©í©ëë€.
ìì(ê°ë ):
ë²íŒì íŽëŠí멎 ììì CSS íŽëì€ë¥Œ í êžíë êµ¬ì± ìì륌 í ì€ížíë€ê³ ê°ì í©ëë€. CSS íì± ëŒìŽëžë¬ëŠ¬ë¥Œ ì¬ì©íì¬ ë€ìì ìíí ì ììµëë€.
- êµ¬ì± ììì ì°ê²°ë CSS ì€íìŒìížë¥Œ íì±í©ëë€.
- í êžëë CSS íŽëì€ì íŽë¹íë ê·ì¹ì ì°Ÿìµëë€.
- ì€íìŒìížì ìž ë©ëªšëЬ ííì ìì íì¬ íŽë¹ íŽëì€ì ì¶ê° ëë ì 거륌 ì뮬ë ìŽì í©ëë€.
- ì뮬ë ìŽì ë CSS ìíì ë°ëŒ êµ¬ì± ììì ëììŽ ê·žì ë°ëŒ ë³ê²œëëì§ íìží©ëë€.
ìŽë ê² í멎 ëžëŒì°ì ê° ììì ì€íìŒì ì ì©íŽìŒ í íìê° ììµëë€. ìŽë¥Œ íµíŽ íšì¬ ë ë¹ ë¥Žê³ ê²©ëŠ¬ë í ì€ížê° ê°ë¥í©ëë€.
3. Shadow DOM ë° ê²©ëŠ¬ë ì€íìŒ
Shadow DOMì êµ¬ì± ìì ëŽì CSS ì€íìŒì 캡ìííì¬ ì í늬ìŒìŽì ì ë€ë¥ž ë¶ë¶ìŒë¡ ì ì¶ëìŽ ìí¥ì 믞ì¹ë ê²ì ë°©ì§íë ë°©ë²ì ì ê³µí©ëë€. ìŽë ëì± ê²©ëŠ¬ëê³ ììž¡ ê°ë¥í í ì€íž í겜ì ë§ëë ë° ëììŽ ë ì ììµëë€. êµ¬ì± ììê° Shadow DOMì ì¬ì©íì¬ ìº¡ìíë ê²œì° í ì€íž ëŽìì íŽë¹ í¹ì êµ¬ì± ììì ì ì©ëë CSS륌 ë ìœê² ì ìŽí ì ììµëë€.
4. CSS 몚ë ë° ìì CSS
CSS 몚ë곌 ìì CSS(êž°ë¥ì CSSëŒê³ ë íš)ë 몚ëì±ê³Œ ì¬ì¬ì©ì±ì ìŽì§íë CSS ìí€í ì²ì ëë€. ëí í¹ì êµ¬ì± ììì ìí¥ì 믞ì¹ë í¹ì CSS ê·ì¹ì ìœê² ìë³íê³ ê²©ëŠ¬í ì ìëë¡ íì¬ CSS í ì€ížë¥Œ ëšìíí ì ììµëë€. ì륌 ë€ìŽ ìì CSS륌 ì¬ì©í멎 ê° íŽëì€ê° ëšìŒ CSS ìì±ì ëíëŽë¯ë¡ ê°ë³ íŽëì€ì ëìì ìœê² 몚ìíê±°ë ì€í í ì ììµëë€.
ì€ì©ì ìž ì
ë€ìí í ì€íž ìë늬ì€ìì CSS í ì€íž ëëžì ì¬ì©íë ë°©ë²ì ëí ì€ì©ì ìž ì륌 ìŽíŽë³Žê² ìµëë€.
ìì 1: ëªšë¬ êµ¬ì± ìì í ì€íž
`show` íŽëì€ë¥Œ 컚í ìŽë ììì ì¶ê°íì¬ í멎ì íìëë ëªšë¬ êµ¬ì± ìì륌 ê³ ë €í©ëë€. `show` íŽëì€ë 몚ë¬ì í멎 ì€ìì ë°°ì¹íê³ íìëëë¡ ì€íìŒì ì ìí ì ììµëë€.
ìŽ êµ¬ì± ìì륌 í ì€ížíë €ë©Ž 몚ì륌 ì¬ì©íì¬ `show` íŽëì€ì ëìì ì뮬ë ìŽì í ì ììµëë€.
// Assume we have a function that toggles the "show" class on the modal element
function toggleModal(modalElement) {
modalElement.classList.toggle('show');
}
// Test
describe('Modal Component', () => {
it('should display the modal when the show class is added', () => {
const modalElement = document.createElement('div');
modalElement.id = 'myModal';
// Mock getComputedStyle to return specific values when the "show" class is present
const mockGetComputedStyle = jest.fn((element) => {
if (element.classList.contains('show')) {
return {
display: 'block',
position: 'fixed',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
};
} else {
return {
display: 'none',
};
}
});
global.getComputedStyle = mockGetComputedStyle;
// Initially, the modal should be hidden
expect(getComputedStyle(modalElement).display).toBe('none');
// Toggle the "show" class
toggleModal(modalElement);
// Now, the modal should be displayed
expect(getComputedStyle(modalElement).display).toBe('block');
expect(getComputedStyle(modalElement).position).toBe('fixed');
expect(getComputedStyle(modalElement).top).toBe('50%');
expect(getComputedStyle(modalElement).left).toBe('50%');
expect(getComputedStyle(modalElement).transform).toBe('translate(-50%, -50%)');
});
});
ì€ëª :
- `show` íŽëì€ê° ììì ìëì§ ì¬ë¶ì ë°ëŒ ë€ë¥ž ê°ì ë°ííë `getComputedStyle`ì 몚ì 구íì ë§ëëë€.
- ê°ìì `toggleModal` íšì륌 ì¬ì©íì¬ ëªšë¬ ìììì `show` íŽëì€ë¥Œ í êží©ëë€.
- `show` íŽëì€ë¥Œ ì¶ê°í ë 몚ë¬ì `display` ìì±ìŽ `none`ìì `block`ìŒë¡ ë³ê²œëëì§ ìŽì€ì í©ëë€. 몚ë¬ìŽ ì¬ë°ë¥Žê² ì€ìì ìëì§ íìžíêž° ìíŽ ìì¹ë íìží©ëë€.
ìì 2: ë°ìí íì ë©ëŽ í ì€íž
í멎 í¬êž°ì ë°ëŒ ë ìŽìììŽ ë³ê²œëë ë°ìí íì ë©ëŽë¥Œ ê³ ë €í©ëë€. 믞ëìŽ ì¿ŒëŠ¬ë¥Œ ì¬ì©íì¬ ìë¡ ë€ë¥ž ì€ëšì ì ëíŽ ìë¡ ë€ë¥ž ì€íìŒì ì ìí ì ììµëë€. ì륌 ë€ìŽ ëªšë°ìŒ ë©ëŽë íë²ê±° ììŽìœ ë€ì ìšê²šì ž ììŒë©° ììŽìœì íŽëŠí 겜ì°ìë§ íìë ì ììµëë€.
ìŽ êµ¬ì± ìì륌 í ì€ížíë €ë©Ž 몚ì륌 ì¬ì©íì¬ ìë¡ ë€ë¥ž í멎 í¬êž°ë¥Œ ì뮬ë ìŽì íê³ ë©ëŽê° ì¬ë°ë¥Žê² ìëíëì§ íìží ì ììµëë€.
// Mock the window.innerWidth property to simulate different screen sizes
const mockWindowInnerWidth = (width) => {
global.innerWidth = width;
global.dispatchEvent(new Event('resize')); // Trigger the resize event
};
describe('Responsive Navigation Menu', () => {
it('should display the mobile menu when the screen size is small', () => {
// Simulate a small screen size
mockWindowInnerWidth(600);
const menuButton = document.createElement('button');
menuButton.id = 'menuButton';
document.body.appendChild(menuButton);
const mobileMenu = document.createElement('div');
mobileMenu.id = 'mobileMenu';
document.body.appendChild(mobileMenu);
const mockGetComputedStyle = jest.fn((element) => {
if(element.id === 'mobileMenu'){
return {
display: (global.innerWidth <= 768) ? 'block' : 'none'
};
} else {
return {};
}
});
global.getComputedStyle = mockGetComputedStyle;
// Assert that the mobile menu is initially displayed (assuming initial css sets to none above 768px)
expect(getComputedStyle(mobileMenu).display).toBe('block');
});
it('should hide the mobile menu when the screen size is large', () => {
// Simulate a large screen size
mockWindowInnerWidth(1200);
const menuButton = document.createElement('button');
menuButton.id = 'menuButton';
document.body.appendChild(menuButton);
const mobileMenu = document.createElement('div');
mobileMenu.id = 'mobileMenu';
document.body.appendChild(mobileMenu);
const mockGetComputedStyle = jest.fn((element) => {
if(element.id === 'mobileMenu'){
return {
display: (global.innerWidth <= 768) ? 'block' : 'none'
};
} else {
return {};
}
});
global.getComputedStyle = mockGetComputedStyle;
// Assert that the mobile menu is hidden
expect(getComputedStyle(mobileMenu).display).toBe('none');
});
});
ì€ëª :
- `window.innerWidth` ìì±ì ì€ì íê³ `resize` ìŽë²€ížë¥Œ ëì€íšì¹íì¬ ìë¡ ë€ë¥ž í멎 í¬êž°ë¥Œ ì뮬ë ìŽì íë íšì `mockWindowInnerWidth`륌 ì ìí©ëë€.
- ê° í ì€íž ì¬ë¡ìì `mockWindowInnerWidth`륌 ì¬ì©íì¬ í¹ì í멎 í¬êž°ë¥Œ ì뮬ë ìŽì í©ëë€.
- ê·žë° ë€ì ì뮬ë ìŽì ë í멎 í¬êž°ë¥Œ êž°ë°ìŒë¡ ë©ëŽê° íìëê±°ë ìšê²šì§ëì§ ìŽì€ì íì¬ ë¯žëìŽ ì¿ŒëŠ¬ê° ì¬ë°ë¥Žê² ìëíëì§ íìží©ëë€.
ëªšë² ì¬ë¡
CSS í ì€íž ëëžì íšê³Œë¥Œ ê·¹ëííë €ë©Ž ë€ì곌 ê°ì ëªšë² ì¬ë¡ë¥Œ ê³ ë €íììì€.
- ì ë í ì€ížì ì§ì€: CSS í ì€íž ëëžì ì£Œë¡ ì ë í ì€ížì ì¬ì©íì¬ ê°ë³ êµ¬ì± ìì ëë êž°ë¥ì 격늬íê³ ê²©ëŠ¬ ìíìì ëìì íìží©ëë€.
- í ì€ížë¥Œ ê°ê²°íê³ ì§ì€ì ìŒë¡ ì ì§: ê° í ì€ížë êµ¬ì± ìì ëìì ëšìŒ 잡멎ì ì§ì€íŽìŒ í©ëë€. í ë²ì ë묎 ë§ì ê²ì íìžíë €ë ì§ëì¹ê² ë³µì¡í í ì€ížë¥Œ ë§ë€ì§ ë§ììì€.
- ì€ëª ì ìž í ì€íž ìŽëŠ ì¬ì©: í ì€ížì 목ì ì ì ííê² ë°ìíë ëª ííê³ ì€ëª ì ìž í ì€íž ìŽëŠì ì¬ì©íììì€. ìŽë ê² í멎 í ì€ížê° íìžíë ëŽì©ì ë ìœê² ìŽíŽíê³ ëë²ê¹ ì ëììŽ ë©ëë€.
- í ì€íž ëëž ì ì§ êŽëЬ: ì€ì CSS ìœëë¡ í ì€íž ëëžì ìµì ìíë¡ ì ì§íììì€. CSS ì€íìŒì ë³ê²œíë ê²œì° ê·žì ë°ëŒ í ì€íž ëëžì ì ë°ìŽížíŽìŒ í©ëë€.
- End-to-End í ì€ížì ê· í: CSS í ì€íž ëëžì ê·ì€í ë구ìŽì§ë§ ëšë ìŒë¡ ì¬ì©íŽìë ì ë©ëë€. ì ë í ì€ížë¥Œ ì€ì ëžëŒì°ì í겜ìì ì í늬ìŒìŽì ì ì 첎 ëìì íìžíë end-to-end í ì€ížë¡ 볎ìíììì€. Cypress ëë Selenium곌 ê°ì ë구ë ì¬êž°ì ë§€ì° ì€ìí ì ììµëë€.
- ìê°ì íê· í ì€íž ê³ ë €: ìê°ì íê· í ì€íž ë구ë CSS ìì ìŒë¡ ìží ìëíì§ ìì ìê°ì ë³ê²œ ì¬íì ê°ì§í ì ììµëë€. ìŽë¬í ë구ë ì í늬ìŒìŽì ì ì€í¬ëаì·ì 캡ì²íì¬ êž°ì€ ìŽë¯žì§ì ë¹êµí©ëë€. ìê°ì ì°šìŽê° ê°ì§ë멎 ëêµ¬ê° ì늌ì ë³ŽëŽ ë³ê²œ ì¬íìŽ ìëì ìž ê²ìžì§ ëë ë²ê·žìžì§ ì¡°ì¬íê³ ê²°ì í ì ììµëë€.
ì í©í ë구 ì í
CSS í ì€íž ëëžì 구ííë ë° ì¬ë¬ í ì€íž íë ììí¬ ë° ëŒìŽëžë¬ëŠ¬ë¥Œ ì¬ì©í ì ììµëë€. ëª ê°ì§ ìžêž° ìë ìµì ì ë€ì곌 ê°ìµëë€.
- Jest: ëŽì¥ë 몚ì êž°ë¥ì ê°ì¶ ìžêž° ìë JavaScript í ì€íž íë ììí¬ì ëë€.
- Mocha: ë€ìí ìŽì€ì ëŒìŽëžë¬ëЬ ë° ëªšì ë구ì íšê» ì¬ì©í ì ìë ì ì°í JavaScript í ì€íž íë ììí¬ì ëë€.
- Sinon.JS: 몚ë JavaScript í ì€íž íë ììí¬ì íšê» ì¬ì©í ì ìë ë 늜í 몚ì ëŒìŽëžë¬ëЬì ëë€.
- PostCSS: í ì€ížìì CSS ì€íìŒìížë¥Œ ì¡°ìíë ë° ì¬ì©í ì ìë ê°ë ¥í CSS íì± ë° ë³í ë구ì ëë€.
- CSSOM: CSS ì€íìŒìížì CSS ê°ì²Ž 몚ëž(CSSOM) íí ìì ì© JavaScript ëŒìŽëžë¬ëЬì ëë€.
- Cypress: ì í늬ìŒìŽì ì ì 첎 ìê°ì 몚ì곌 ëìì íìžíë ë° ì¬ì©í ì ìë end-to-end í ì€íž íë ììí¬ì ëë€.
- Selenium: ìê°ì íê· í ì€ížì ì죌 ì¬ì©ëë ìžêž° ìë ëžëŒì°ì ìëí íë ììí¬ì ëë€.
ê²°ë¡
CSS í ì€íž ëëž, ëë ìŽ ê°ìŽëìì CSS ê°ì§ ê·ì¹ìŽëŒê³ ë¶ë¥Žë ê²ì ì€íìŒìížì íì§ê³Œ ì ì§ êŽëЬì±ì í¥ììí€ë ê°ë ¥í êž°ì ì ëë€. í ì€íž ì€ì CSS ëìì 격늬íê³ ì ìŽí ì ìë ë°©ë²ì ì ê³µíšìŒë¡ìš CSS í ì€íž ëëžì íµíŽ ëì± ì§ì€ì ìŽê³ ìì ì ìŽë©° íšìšì ìž í ì€ížë¥Œ ìì±í ì ììµëë€. ìì ì¹ì¬ìŽížë¥Œ 구ì¶íë í° ì¹ ì í늬ìŒìŽì ì 구ì¶íë í ì€íž ì ëµì CSS í ì€íž ëëžì íµí©í멎 íë°ížìë ìœëì ê²¬ê³ ì±ê³Œ ìì ì±ì í¬ê² í¥ììí¬ ì ììµëë€. end-to-end í ì€íž ë° ìê°ì íê· í ì€ížì ê°ì ë€ë¥ž í ì€íž ë°©ë²ë¡ 곌 íšê» ì¬ì©íì¬ í¬êŽì ìž í ì€íž ë²ì륌 ë¬ì±íë ê²ì ìì§ ë§ììì€.
ìŽ ë¬žìì ì€ëª ë êž°ì 곌 ëªšë² ì¬ë¡ë¥Œ ì±íí멎 ëì± ê°ë ¥íê³ ì ì§ êŽëЬ ê°ë¥í ìœëë² ìŽì€ë¥Œ 구ì¶íì¬ CSS ì€íìŒìŽ ë€ìí ëžëŒì°ì ì ì¥ì¹ìì ì¬ë°ë¥Žê² ìëíê³ íë°ížìë ìœëê° ììëë¡ CSSì ìíž ìì©íëë¡ í ì ììµëë€. ì¹ ê°ë°ìŽ ê³ì ë°ì íšì ë°ëŒ CSS í ì€ížê° ì ì ë ì€ìíŽì§ê³ CSS í ì€íž ëëžì êž°ì ì ë§ì€í°íë ê²ì 몚ë íë°ížìë ê°ë°ììê² ê·ì€í êž°ì ìŽ ë ê²ì ëë€.