Apgūstiet CSS testēšanu, izmantojot viltus likumus. Šī rokasgrāmata aptver CSS testa dubultniekus, to priekšrocības, ieviešanu un labāko praksi robustām un uzturamām stila lapām.
CSS Viltus Likums: Robusta Testēšana ar CSS Testa Dubultniekiem
Kaskādes stilu lapu (CSS) testēšana var būt sarežģīts, bet būtisks tīmekļa izstrādes aspekts. Tradicionālās testēšanas metodoloģijas bieži vien cīnās, lai izolētu CSS kodu un efektīvi pārbaudītu tā darbību. Tieši šeit parādās jēdziens "CSS Viltus Likums" jeb precīzāk, CSS Testa Dubultnieki. Šis raksts iedziļinās CSS testēšanas pasaulē, izmantojot testa dubultniekus, izpētot to priekšrocības, ieviešanas paņēmienus un labāko praksi robustu un uzturamu stilu lapu izveidei dažādās pārlūkprogrammās un ierīcēs.
Kas ir CSS Testa Dubultnieki?
Programmatūras testēšanā testa dubultnieks ir vispārīgs termins jebkuram objektam, kas testēšanas laikā aizstāj reālu objektu. Testa dubultnieku izmantošanas mērķis ir izolēt testējamo vienību un kontrolēt tās atkarības, padarot testēšanu paredzamāku un mērķtiecīgāku. CSS kontekstā testa dubultnieks (ko mēs vienkāršības labad saucam par "CSS Viltus Likumu") ir paņēmiens mākslīgu CSS likumu vai darbību izveidei, kas atdarina reālo lietu, ļaujot jums pārbaudīt, vai jūsu JavaScript vai cits front-end kods mijiedarbojas ar CSS, kā paredzēts, nepaļaujoties uz faktisko renderēšanas dzinēju vai ārējām stilu lapām.
Būtībā tās ir simulētas CSS darbības, kas izveidotas, lai testētu komponentu mijiedarbību un izolētu kodu testēšanas laikā. Šī pieeja ļauj veikt mērķtiecīgu JavaScript komponentu vai cita front-end koda vienības testēšanu, kas paļaujas uz noteiktiem CSS stiliem vai darbībām.
Kāpēc Izmantot CSS Testa Dubultniekus?
Vairākas galvenās priekšrocības rodas, iekļaujot CSS testa dubultniekus savā testēšanas stratēģijā:
- Izolācija: Testa dubultnieki ļauj izolēt testējamo kodu no pārlūkprogrammas renderēšanas dzinēja un ārējo CSS stilu lapu sarežģītības. Tas padara jūsu testus mērķtiecīgākus un mazāk pakļautus viltus pozitīviem vai negatīviem rezultātiem, ko izraisa ārēji faktori.
- Ātrums: Testu palaišana pret reālu pārlūkprogrammas renderēšanu var būt lēna un resursietilpīga. Testa dubultnieki, būdami vieglas simulācijas, ievērojami paātrina jūsu testu komplekta izpildi.
- Paredzamība: Pārlūkprogrammu neatbilstības un ārējo stilu lapu izmaiņas var padarīt testus neuzticamus. Testa dubultnieki nodrošina konsekventu un paredzamu vidi, nodrošinot, ka jūsu testi neizdodas tikai tad, ja testējamajam kodam ir kļūda.
- Kontrole: Testa dubultnieki ļauj kontrolēt CSS vides stāvokli, padarot iespējamu testēt dažādus scenārijus un robežgadījumus, kurus varētu būt grūti vai neiespējami atveidot reālā pārlūkprogrammas vidē.
- Agrīna Kļūdu Atklāšana: Simulējot CSS darbību, jūs varat identificēt problēmas ar jūsu front-end koda mijiedarbību ar CSS agrīnā izstrādes procesā. Tas novērš kļūdu iekļūšanu ražošanā un samazina atkļūdošanas laiku.
CSS Testa Dubultnieku Veidi
Lai gan termins "CSS Viltus Likums" tiek lietots plaši, CSS testēšanā var izmantot dažādus testa dubultnieku veidus:
- Stub: Stub nodrošina iepriekš sagatavotas atbildes uz zvaniem, kas veikti testa laikā. CSS testēšanā stub varētu būt funkcija, kas atgriež iepriekš definētu CSS īpašības vērtību, kad tā tiek izsaukta. Piemēram, stub varētu atgriezt `20px`, kad tiek pieprasīta elementa `margin-left` īpašība.
- Mock: Mock ir sarežģītāki par stub. Tie ļauj jums pārbaudīt, vai noteiktas metodes tika izsauktas ar noteiktiem argumentiem. CSS testēšanā mock varētu izmantot, lai pārbaudītu, vai JavaScript funkcija pareizi iestata elementa `display` īpašību uz `none`, kad tiek noklikšķināta poga.
- Fakes: Fakes ir strādājošas implementācijas, bet parasti izmanto kādu saīsni, kas padara tās nepiemērotas ražošanai. CSS testēšanā tas varētu būt vienkāršots CSS parsētājs, kas apstrādā tikai CSS funkciju apakškopu, vai fiktīvs elements, kas simulē CSS izkārtojuma darbību.
- Spies: Spies ieraksta informāciju par to, kā tiek izsaukta funkcija vai metode. CSS testēšanā spiegu varētu izmantot, lai izsekotu, cik reizes testa laikā tiek piekļūts vai modificēts noteikts CSS rekvizīts.
Ieviešanas Paņēmieni
Var izmantot vairākus paņēmienus CSS testa dubultnieku ieviešanai atkarībā no jūsu testēšanas ietvara un testējamā CSS sarežģītības.
1. Uz JavaScript bāzes veidoti Mock
Šī pieeja ietver JavaScript mock bibliotēku (piemēram, Jest, Mocha, Sinon.JS) izmantošanu, lai pārtvertu un manipulētu ar CSS saistītām funkcijām vai metodēm. Piemēram, jūs varat mock `getComputedStyle` metodi, lai atgrieztu iepriekš definētas CSS rekvizītu vērtības. Šo metodi JavaScript kods parasti izmanto, lai iegūtu elementa stila vērtības pēc tam, kad pārlūkprogramma ir piemērojusi stilus.
Piemērs (izmantojot Jest):
const element = document.createElement('div');
const mockGetComputedStyle = jest.fn().mockReturnValue({
marginLeft: '20px',
backgroundColor: 'red',
});
global.getComputedStyle = mockGetComputedStyle;
// Tagad, kad JavaScript kods izsauc getComputedStyle(element), tas saņems mocked vērtības.
//Test example
expect(getComputedStyle(element).marginLeft).toBe('20px');
expect(getComputedStyle(element).backgroundColor).toBe('red');
Paskaidrojums:
- Mēs izveidojam mock funkciju `mockGetComputedStyle`, izmantojot `jest.fn()`.
- Mēs izmantojam `mockReturnValue`, lai norādītu vērtības, kuras mock funkcijai jāatgriež, kad tā tiek izsaukta. Šajā gadījumā tā atgriež objektu, kas atdarina `getComputedStyle` atgriezto vērtību ar iepriekš definētiem `marginLeft` un `backgroundColor` rekvizītiem.
- Mēs aizstājam globālo `getComputedStyle` funkciju ar savu mock funkciju. Tas nodrošina, ka jebkurš JavaScript kods, kas testa laikā izsauc `getComputedStyle`, faktiski izsauks mūsu mock funkciju.
- Visbeidzot, mēs apgalvojam, ka `getComputedStyle(element).marginLeft` un `getComputedStyle(element).backgroundColor` izsaukšana atgriež mocked vērtības.
2. CSS Parsēšanas un Manipulācijas Bibliotēkas
Bibliotēkas, piemēram, PostCSS vai CSSOM, var izmantot, lai parsētu CSS stilu lapas un izveidotu CSS likumu atveidojumus atmiņā. Pēc tam jūs varat manipulēt ar šiem atveidojumiem, lai simulētu dažādus CSS stāvokļus un pārbaudītu, vai jūsu kods reaģē pareizi. Tas ir īpaši noderīgi, lai testētu mijiedarbību ar dinamisku CSS, kur stilus pievieno vai modificē JavaScript.
Piemērs (konceptuāls):
Iedomājieties, ka testējat komponentu, kas pārslēdz CSS klasi elementam, kad tiek noklikšķināta poga. Jūs varētu izmantot CSS parsēšanas bibliotēku, lai:
- Parsētu CSS stilu lapu, kas saistīta ar jūsu komponentu.
- Atrastu likumu, kas atbilst pārslēdzamajai CSS klasei.
- Simulētu šīs klases pievienošanu vai noņemšanu, modificējot stilu lapas atmiņā esošo atveidojumu.
- Pārbaudītu, vai jūsu komponenta darbība attiecīgi mainās, pamatojoties uz simulēto CSS stāvokli.
Tas ļauj izvairīties no nepieciešamības paļauties uz pārlūkprogrammu, kas piemēro stilus elementam. Tas nodrošina daudz ātrāku un izolētāku testu.
3. Shadow DOM un Izolēti Stili
Shadow DOM nodrošina veidu, kā iekapsulēt CSS stilus komponentā, novēršot to noplūdi un ietekmi uz citām lietojumprogrammas daļām. Tas var būt noderīgi, lai izveidotu izolētākas un paredzamākas testēšanas vides. Ja komponents ir iekapsulēts, izmantojot Shadow DOM, jūs varat vieglāk kontrolēt CSS, kas attiecas uz šo konkrēto komponentu testā.
4. CSS Moduļi un Atomisks CSS
CSS Moduļi un Atomisks CSS (pazīstams arī kā funkcionāls CSS) ir CSS arhitektūras, kas veicina modularitāti un atkārtotu izmantojamību. Tās var arī vienkāršot CSS testēšanu, atvieglojot to konkrēto CSS likumu identificēšanu un izolēšanu, kas ietekmē konkrētu komponentu. Piemēram, izmantojot Atomisks CSS, katra klase attēlo vienu CSS īpašību, tāpēc jūs varat viegli mock vai stub atsevišķu klašu darbību.
Praktiski Piemēri
Izpētīsim dažus praktiskus piemērus, kā CSS testa dubultniekus var izmantot dažādos testēšanas scenārijos.
1. piemērs: Modālā komponenta testēšana
Apsveriet modālo komponentu, kas tiek parādīts ekrānā, pievienojot `show` klasi tā konteinera elementam. `show` klase varētu definēt stilus, lai novietotu modālo logu ekrāna centrā un padarītu to redzamu.
Lai testētu šo komponentu, varat izmantot mock, lai simulētu `show` klases darbību:
// Pieņemsim, ka mums ir funkcija, kas pārslēdz "show" klasi modālajā elementā
function toggleModal(modalElement) {
modalElement.classList.toggle('show');
}
// Tests
describe('Modal Component', () => {
it('should display the modal when the show class is added', () => {
const modalElement = document.createElement('div');
modalElement.id = 'myModal';
// Mock getComputedStyle, lai atgrieztu noteiktas vērtības, kad ir klāt "show" klase
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;
// Sākumā modālajam logam jābūt paslēptam
expect(getComputedStyle(modalElement).display).toBe('none');
// Pārslēdz "show" klasi
toggleModal(modalElement);
// Tagad modālajam logam jābūt parādītam
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%)');
});
});
Paskaidrojums:
- Mēs izveidojam mock implementāciju `getComputedStyle`, kas atgriež dažādas vērtības atkarībā no tā, vai elementam ir klāt klase `show`.
- Mēs pārslēdzam klasi `show` modālajā elementā, izmantojot fiktīvu funkciju `toggleModal`.
- Mēs apgalvojam, ka modālā loga īpašība `display` mainās no `none` uz `block`, kad tiek pievienota klase `show`. Mēs pārbaudām arī pozicionēšanu, lai nodrošinātu, ka modālais logs ir pareizi centrēts.
2. piemērs: Adaptīvas navigācijas izvēlnes testēšana
Apsveriet adaptīvu navigācijas izvēlni, kas maina savu izkārtojumu atkarībā no ekrāna izmēra. Jūs varat izmantot multivides vaicājumus, lai definētu dažādus stilus dažādiem pārtraukumpunktiem. Piemēram, mobilā izvēlne var tikt paslēpta aiz hamburgera ikonas un parādīta tikai tad, kad tiek noklikšķināta ikona.
Lai testētu šo komponentu, varat izmantot mock, lai simulētu dažādus ekrāna izmērus un pārbaudītu, vai izvēlne darbojas pareizi:
// Mock window.innerWidth īpašību, lai simulētu dažādus ekrāna izmērus
const mockWindowInnerWidth = (width) => {
global.innerWidth = width;
global.dispatchEvent(new Event('resize')); // Iedarbina resize notikumu
};
describe('Responsive Navigation Menu', () => {
it('should display the mobile menu when the screen size is small', () => {
// Simulē nelielu ekrāna izmēru
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;
// Pārliecinieties, ka mobilā izvēlne sākotnēji tiek parādīta (pieņemot, ka sākotnējais css iestatīts uz none virs 768px)
expect(getComputedStyle(mobileMenu).display).toBe('block');
});
it('should hide the mobile menu when the screen size is large', () => {
// Simulē lielu ekrāna izmēru
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;
// Pārliecinieties, ka mobilā izvēlne ir paslēpta
expect(getComputedStyle(mobileMenu).display).toBe('none');
});
});
Paskaidrojums:
- Mēs definējam funkciju `mockWindowInnerWidth`, lai simulētu dažādus ekrāna izmērus, iestatot īpašību `window.innerWidth` un nosūtot notikumu `resize`.
- Katrā testa gadījumā mēs simulējam noteiktu ekrāna izmēru, izmantojot `mockWindowInnerWidth`.
- Pēc tam mēs apgalvojam, ka izvēlne tiek parādīta vai paslēpta, pamatojoties uz simulēto ekrāna izmēru, pārbaudot, vai multivides vaicājumi darbojas pareizi.
Labākā Prakse
Lai maksimāli palielinātu CSS testa dubultnieku efektivitāti, apsveriet šādu labāko praksi:
- Koncentrējieties uz Vienību Testēšanu: Izmantojiet CSS testa dubultniekus galvenokārt vienību testēšanai, kur vēlaties izolēt atsevišķus komponentus vai funkcijas un pārbaudīt to darbību izolācijā.
- Saglabājiet Testus Īsus un Koncentrētus: Katram testam jākoncentrējas uz vienu komponenta darbības aspektu. Izvairieties no pārāk sarežģītu testu izveides, kas mēģina pārbaudīt pārāk daudz lietu vienlaikus.
- Izmantojiet Aprakstošus Testu Nosaukumus: Izmantojiet skaidrus un aprakstošus testu nosaukumus, kas precīzi atspoguļo testa mērķi. Tas atvieglo izpratni par to, ko tests pārbauda, un palīdz atkļūdot.
- Uzturiet Testa Dubultniekus: Uzturiet savus testa dubultniekus atjauninātus ar faktisko CSS kodu. Ja maināt CSS stilus, noteikti atjauniniet arī savus testa dubultniekus.
- Līdzsvarojiet ar Gala-Galam Testēšanu: CSS testa dubultnieki ir vērtīgs rīks, bet tos nedrīkst izmantot izolācijā. Papildiniet savus vienības testus ar gala-galam testiem, kas pārbauda lietojumprogrammas vispārējo darbību reālā pārlūkprogrammas vidē. Rīki, piemēram, Cypress vai Selenium, šeit var būt nenovērtējami.
- Apsveriet Vizuālo Regresijas Testēšanu: Vizuālās regresijas testēšanas rīki var atklāt neparedzētas vizuālas izmaiņas, ko izraisa CSS modifikācijas. Šie rīki uzņem jūsu lietojumprogrammas ekrānuzņēmumus un salīdzina tos ar sākotnējiem attēliem. Ja tiek konstatēta vizuāla atšķirība, rīks jūs brīdina, ļaujot jums izpētīt un noteikt, vai izmaiņas ir tīšas vai kļūda.
Pareizo Rīku Izvēle
Vairākus testēšanas ietvarus un bibliotēkas var izmantot CSS testa dubultnieku ieviešanai. Daži populāri varianti ietver:- Jest: Populārs JavaScript testēšanas ietvars ar iebūvētām mock iespējām.
- Mocha: Elastīgs JavaScript testēšanas ietvars, ko var izmantot ar dažādām apgalvojumu bibliotēkām un mock rīkiem.
- Sinon.JS: Atsevišķa mock bibliotēka, ko var izmantot ar jebkuru JavaScript testēšanas ietvaru.
- PostCSS: Jaudīgs CSS parsēšanas un transformācijas rīks, ko var izmantot, lai manipulētu ar CSS stilu lapām jūsu testos.
- CSSOM: JavaScript bibliotēka darbam ar CSS Objektu Modeļa (CSSOM) CSS stilu lapu atveidojumiem.
- Cypress: Gala-galam testēšanas ietvars, ko var izmantot, lai pārbaudītu lietojumprogrammas vispārējo vizuālo izskatu un darbību.
- Selenium: Populārs pārlūkprogrammas automatizācijas ietvars, ko bieži izmanto vizuālai regresijas testēšanai.
Secinājums
CSS testa dubultnieki jeb, kā mēs tos saucam šajā rokasgrāmatā, "CSS Viltus Likumi", ir spēcīgs paņēmiens jūsu stilu lapu kvalitātes un uzturamības uzlabošanai. Nodrošinot veidu, kā izolēt un kontrolēt CSS darbību testēšanas laikā, CSS testa dubultnieki ļauj jums rakstīt mērķtiecīgākus, uzticamākus un efektīvākus testus. Neatkarīgi no tā, vai veidojat nelielu vietni vai lielu tīmekļa lietojumprogrammu, CSS testa dubultnieku iekļaušana jūsu testēšanas stratēģijā var ievērojami uzlabot jūsu front-end koda robustumu un stabilitāti. Atcerieties tos izmantot kopā ar citām testēšanas metodoloģijām, piemēram, gala-galam testēšanu un vizuālo regresijas testēšanu, lai panāktu visaptverošu testa pārklājumu.
Pieņemot šajā rakstā izklāstītos paņēmienus un labāko praksi, jūs varat izveidot robustāku un uzturamāku koda bāzi, nodrošinot, ka jūsu CSS stili darbojas pareizi dažādās pārlūkprogrammās un ierīcēs un ka jūsu front-end kods mijiedarbojas ar CSS, kā paredzēts. Tā kā tīmekļa izstrāde turpina attīstīties, CSS testēšana kļūs arvien svarīgāka, un CSS testa dubultnieku mākslas apguve būs vērtīga prasme jebkuram front-end izstrādātājam.