Cypress — web applicationlarni browser ichida avtomatik test qilishga mo‘ljallangan JavaScript va TypeScript ekotizimidagi vosita. U E2E va component testlarda ishlatiladi. Cypress test runner, automatic retry, network interception, screenshot va interaktiv debugging imkoniyatlarini birlashtiradi.
Cypress application bilan browserga yaqin muhitda ishlagani sabab DOM, request va test qadamlarini ko‘rish qulay.
Test runner
Cypress testlarni browser bilan birga ishga tushiradi.
Interaktiv mode’da developer:
ni ko‘radi.
Headless mode CI uchun ishlatiladi.
Command queue
Cypress commandlari oddiy synchronous function kabi darhol bajarilmaydi.
Ular queue’ga qo‘shilib, framework tomonidan ketma-ket bajariladi:
cy.visit()
cy.get()
cy.click()
Promise va oddiy variable bilan ishlashda shu modelni tushunish muhim.
Automatic retry
Query va assertionlar timeout ichida qayta bajariladi.
Masalan, element kechroq paydo bo‘lsa cy.get() uni kutadi.
Actiondan keyingi assertion ham state expected holatga kelishini kutadi.
Fixed wait(5000) ko‘pincha kerak emas.
Selector
Element:
- semantic attribute;
- stable ID;
data-*;- text;
- role
orqali topiladi.
Style class va DOM strukturaga bog‘liq selector mo‘rt.
Test uchun maxsus atribut user tajribasiga ta’sir qilmaydi.
Chain
Cypress commandlari chain bilan yoziladi:
cy.get(...).should(...).click()
Oldingi command subjectni keyingisiga beradi.
Subject DOM o‘zgarganda stale bo‘lishi mumkin.
Actiondan keyin elementni qayta query qilish xavfsizroq.
Fixture
JSON yoki boshqa static data fixtures directory’da saqlanishi mumkin.
Test response mock yoki input sifatida ishlatadi.
Fixture juda katta bo‘lsa test maqsadini yashiradi.
Dynamic data factory yoki task orqali yaratilishi mumkin.
Intercept
cy.intercept() network requestni kuzatadi yoki stub qiladi.
Qo‘llanishi:
- alias berish;
- response kutish;
- error simulyatsiyasi;
- request body tekshirish;
- fixture qaytarish.
Intercept application request yuborishidan oldin ro‘yxatdan o‘tkaziladi.
Alias
Request, element yoki boshqa qiymatga alias beriladi.
Masalan:
@getProfile
Test alias bilan request tugashini kutadi.
Alias scope va lifecycle framework qoidalariga bog‘liq.
Global mutable alias testlarni bog‘lab qo‘ymasligi kerak.
cy.wait
Network aliasni kutish ma’noli:
cy.wait("@getProfile")
Fixed millisecond kutish esa sekin va flaky.
Wait response status va body’ni qaytarishi mumkin.
Request umuman ketmasa timeout asl muammoni ko‘rsatadi.
Component testing
Alohida UI component real browserda mount qilinadi.
Props, event va visual state tekshiriladi.
Bu to‘liq E2E’dan tezroq va UI framework bilan integrationni tekshiradi.
Router, store yoki theme wrapper fixture sifatida beriladi.
Custom command
Takroriy action uchun command yaratiladi:
cy.login()
cy.createUser()
Custom command business ma’noli bo‘lishi kerak.
Ichida juda ko‘p yashirin assertion va side effect bo‘lsa testni tushunish qiyinlashadi.
Login
Har testda UI orqali login sekin.
API request yoki session cache orqali authenticated holat yaratilishi mumkin.
Login UI uchun alohida E2E ssenariy qoladi.
Session invalidation va role bo‘yicha alohida cache key ishlatiladi.
Origin
Cross-origin sahifa va authentication flow browser security sabab maxsus API talab qilishi mumkin.
Cypress test runner va application originlari o‘rtasidagi interaction cheklangan.
Third-party loginni to‘liq boshqarish o‘rniga test identity provider yoki programmatic login ishlatilishi mumkin.
Browser
Cypress Chromium oilasi va boshqa qo‘llanadigan browserlarda test bajarishi mumkin.
Browser support tool versioniga bog‘liq.
Har browserning rendering va API farqi cross-browser projectlarda alohida tekshiriladi.
Screenshot va video
Failure paytida screenshot olinadi.
CI run video yozishi mumkin.
Command log bilan birga artifact diagnostikani yengillashtiradi.
Sensitive user data screenshotga tushishi mumkin, shuning uchun test data va retention nazorat qilinadi.
Time control
Clock va timerlarni nazorat qilish mumkin.
Bu debounce, expiration va interval behaviorini real vaqt kutmasdan test qiladi.
Date va timezone APIlari bir-biriga mos simulyatsiya qilinadi.
Network timeoutni clock stub bilan aralashtirish ehtiyotkorlik talab qiladi.
cy.task
Browser processidan Node processidagi code’ga murojaat qilish imkonini beradi.
Masalan:
Task argument va return qiymati serializable bo‘ladi.
Untrusted inputni shell commandga uzatish xavfli.
Izolyatsiya
Har test cookie, storage va page holatini toza boshlashi mumkin.
Test oldingi test yaratgan UI state’ga tayanmasligi kerak.
Database data alohida cleanup talab qiladi.
Parallel run unique user yoki tenant bilan ishlaydi.
Cypress va Playwright
Ikkalasi automatic waiting, network control va zamonaviy E2E API beradi.
Cypress interaktiv command log va browser ichidagi execution modeli bilan tanilgan.
Playwright browser context, multi-page va turli engine boshqaruviga kuchli urg‘u beradi.
Tanlov loyiha va jamoa ehtiyojiga bog‘liq.
Retry-ability chegarasi
Cypress query va assertionlarni retry qiladi, ammo oddiy JavaScript kodi avtomatik qayta bajarilmaydi. DOM qiymatini command chain tashqarisida erta olib qo‘yish stale natija beradi. Assertion chain ichida yoziladi.
Test isolation
Har test boshlanishida page va browser state reset qilinishi mumkin. Server database’si esa alohida API yoki task bilan tozalanadi. Browser isolation backend state isolationini avtomatik bermaydi.
Bog‘liq tushunchalar
Cypress, E2E testing, Component testing, Test runner, Network interception, Fixture, Automatic retry, Browser automation, JavaScript testing, Playwright