Sparround

Testlərin təşkili: tag-lar, hook-lar, addımlar, annotasiyalar

20 test ilə təşkilat lazım deyil; 500 test ilə təşkilatsızlıq suite-i idarəolunmaz edir.

Qruplaşdırma: test.describe('Checkout') blokları faylı məntiqi bölür və hesabatda iyerarxiya yaradır. Nested describe mümkündür, amma 2 səviyyədən dərinə getmək oxunaqlığı azaldır. test.describe.configure({ mode: 'serial' }) — testləri ardıcıl və asılı edir (biri sınsa, qalanı skip olunur); bu, son çarədir, çünki paralelliyi və müstəqilliyi öldürür. mode: 'parallel' isə eyni fayldakı testləri də paralel işlədir.

Tag-lar və seçmə icra: müasir sintaksis test('...', { tag: ['@smoke', '@critical'] }, async ({ page }) => ...); adda @smoke yazmaq da işləyir. İcra: --grep @smoke, --grep-invert @slow, məntiqi ifadə: --grep "@smoke|@critical". Praktik tag dəsti: @smoke (PR-da işləyən kritik minimum), @regression, @slow, @flaky (quarantine), @wip.

Seçmə icranın əsas dəyəri: PR-da 5 dəqiqəlik smoke, nightly-də tam regression — yəni developer sürətli feedback alır, komanda isə geniş əhatəni itirmir.

Hook-lar və fixture-lər — çox verilən müqayisə sualı:

  • beforeEach/afterEach — sadə, imperativ, hamıya tanış. Problem: describe blokundakı BÜTÜN testlərə tətbiq olunur (lazım olmasa da), tiplənmir və kompozisiya olunmur.
  • Fixture — deklarativdir: test hansı fixture-i istəyirsə, arqumentdə sadalayır; yalnız o zaman işə düşür. Tipli, kompozisiya olunan (fixture fixture-dən asılı ola bilər), teardown-ı zəmanətli.

Praktik qayda: resurs və data → fixture; sadə, universal hazırlıq → hook. Məsələn, hər testdə page.goto('/') üçün beforeEach normaldır; user yaratmaq üçün mütləq fixture.

Annotasiyalar — testin vəziyyətini KODDA sənədləşdirir:

  • test.skip() — müvəqqəti söndürmə; həmişə səbəb və ticket ilə
  • test.fixme() — test və ya funksionallıq sınıqdır, düzəliş gözlənilir (skip-dən fərqi: niyyət açıqdır)
  • test.fail() — testin sınMASI GÖZLƏNİLİR; keçsə, əksinə, fail olur — məlum bug üçün ideal
  • test.slow() — timeout-u 3 dəfə artırır (silmək əvəzinə)
  • test.only() — yalnız lokal debugging üçün; lint ilə main-ə düşməsi bloklanmalıdır
  • test.describe.configure({ retries: 2 }) — yalnız konkret qrup üçün retry

test.step() isə testin İÇİNİ strukturlaşdırır: hesabatda və trace-də adlandırılmış mərhələlər görünür.

AnnotasiyaMənasıNə vaxt istifadə et
test.skip(reason)Test işlədilmirŞərt ödənmir (məs. feature bu mühitdə yoxdur) — səbəb yazılmalıdır
test.fixme(reason)Test sınıqdır, düzəliş gözlənilirQuarantine — ticket linki ilə birlikdə
test.fail()Fail GÖZLƏNİLİR; keçərsə xəbərdarlıq verirMəlum, hələ düzəlməmiş product bug — düzələn kimi xəbər tutursan
test.slow()Timeout 3x artırObyektiv uzun axın (hesabat generasiyası, batch job)
test.only()Yalnız bu test işləyirLokal debugging; main-ə düşməsi lint ilə bloklanmalıdır

İnterview-da güclü göstərici: test.skip() ilə test.fail() fərqini bilmək. skip problemi gizlədir — test işləmir və heç kim onu xatırlamır; fail isə problemi izləyir — bug düzələn kimi test "gözlənilmədən keçdi" deyə xəbər verir. Cavabında əlavə et: bizdə skip həmişə ticket linki ilə gəlir, əks halda quarantine daimi qəbiristanlığa çevrilir.

📚 Mənbələr və sənədlər