Test kodunun keyfiyyəti və konvensiyalar
Əsas prinsip: test kodu da production kodudur. Onu da eyni ciddiliklə review edirik, çünki onu da illərlə saxlayacağıq. Fərq yalnız auditoriyadadır — test kodunun "istifadəçisi" gələcək komanda yoldaşıdır.
Adlandırma qaydaları:
- Test adı davranışı deyir:
test('rejects login with expired password')—test('test2')yox - Fayl adı feature-ə uyğun:
checkout-coupon.spec.ts - POM metodları user niyyəti:
applyCoupon(code)—clickBtn3()yox - Locator dəyişənləri elementin rolu ilə:
submitButton,errorAlert - Boolean helper-lər sual formasında:
isCartEmpty()
Struktur qaydaları: bir test — bir davranış; AAA bölgüsü boş sətirlə görünsün; testdə if/for olmasın (şərtli məntiq testi qeyri-deterministik edir — parametrləşdirmə istifadə et); try/catch ilə fail udulmasın.
Avtomatik nəzarət insan nəzarətindən üstündür — konvensiyanı sənəddə yox, lint-də saxla. TypeScript + ESLint (typed linting) + eslint-plugin-playwright + Prettier dəsti komandada mübahisələri bitirir: formatlaşdırma CI-da yoxlanır, üslub müzakirəsi review-dan çıxır və review yalnız məntiqə fokuslanır.
Ən kritik qayda no-floating-promises-dir. Playwright API-si tamamilə async-dır; await unudulan sətir səssizcə icra olunmur və test yaşıl qalır — yəni yalan pozitiv. Bu, avtomatlaşdırmada ən təhlükəli səhv sinfidir, çünki heç bir siqnal vermir.
| Qayda | Nəyin qarşısını alır |
|---|---|
| @typescript-eslint/no-floating-promises | await unudulan sətrin səssizcə icra olunmaması — yalan yaşıl test |
| playwright/no-wait-for-timeout | Sabit sleep-lər — yavaşlıq və flakiness |
| playwright/no-focused-test | Unudulmuş test.only — suite-in yalnız 1 testlə "yaşıl" olması |
| playwright/expect-expect | Assertion-suz "test" — heç vaxt fail olmayan boş yoxlama |
| playwright/no-conditional-in-test | if/else-lə qeyri-deterministik, izahı çətin testlər |
İnterview-də çox güclü cavab: "Ən təhlükəli test bug-ı hansıdır?" → unudulmuş `await`. Test yaşıldır, amma heç nə yoxlamır. Bunu no-floating-promises lint qaydası ilə bağladığını de — bu, "problemi bir dəfə həll edirəm" düşüncəsini göstərir və middle+ siqnalıdır.
📚 Mənbələr və sənədlər
- Ən yaxşı praktikalarrəsmiplaywright.dev