id | title | permalink | prev |
---|---|---|---|
testing-environments |
Test Etmə Mühitləri |
docs/testing-environments.html |
testing-recipes.html |
Bu sənəddə mühitə təsir edə bilən amillərdən və bəzi ssenarilər üçün tövsiyyələrdən danışacağıq.
Jest, mocha və ava kimi test işləyiciləri test dəstlərinin sadə JavaScript kimi yazılmasına və bu testləri development prosesinin bir hissəsi kimi icra edilməsinə imkan yaradır. Əlavə olaraq, test dəstləri davamlı inteqrasiyanın bir hissəsi kimi icra oluna bilir.
- Jest test icra edicisi React layihələri ilə çox uyğundur. Bu alət ilə modul və taymerlərin mok edilməsi və
jsdom
kimi xüsusiyyətləri dəstəkləyir. Create React App işlətdikdə, heç bir konfiqurasiyasız Jest-dən istifadə edə bilərsiniz. - mocha kimi kitabxanalar real brauzer mühitlərində yaxşı işləyir. Bu kitabxanalar əsl brauzer mühitindən asılı olan testlər üçün faydalı ola bilər.
- Bir neçə səhifələr arasında olan axını test etmək üçün end-to-end testlər işlənir. Bu testlər üçün fərqli quraşdırma lazımdır.
Adətən, testlər brauzer kimi real render sahəsi olmayan mühitlərdə icra olunurlar. Bu mühitlər üçün brauzeri jsdom
(Node.js-də işləyən yüngül brauzer tətbiqi) ilə simulyasiya etməyi tövsiyyə edirik.
Bir çox halda, jsdom normal brauzer kimi işləyir. Lakin, bu alətin şablon və naviqasiya kimi xüsusiyyətləri yoxdur. Buna baxmayaraq, bu alət ilə hər test üçün yeni brauzerin açılmasının lazım olmadığından əksər veb əsaslı komponentlərin test edilməsi faydalıdır. Əlavə olaraq, bu alətin testlər ilə eyni sistem prosesində işlədiyindən render olunan DOM-u yoxlayıb təsdiq edə bilərsiniz.
Real brauzerdə olduğu kimi jsdom ilə istifadəçi interaksiyalarını yoxlamaq mümkündür: testlər ilə hadisələri DOM nodlara göndərib bu hadisələrdən yaranan yan effektləri təsdiq edə bilirik (nümunə).
UI testlərin böyük hissəsi yuxarıdakı formada yazıla bilər: Jest icra edicisindən istifadə edib act()
köməkçisindən (nümunə) istifadə edərək istifadəçi interaksiyalarını brauzer hadisələri kimi göndərib UI-ı jsdom-a render etmək.
Brauzer spesifik davranışları test edən və şablon və real daxil olmalar kimi nativ brauzer davranışlarından asılı olan kitabxana yazdıqda mocha kimi freymvorkdan istifadə edə bilərsiniz.
DOM-un simulyasiya oluna bilmədiyi mühitdə (məsələn, Node.js-dən React Native komponentləri test etdikdə) işlədikdə elementlər ilə interaksiyaları simulyasiya etmək üçün hadisə simulyasiya köməkçilərindən istifadə edə bilərsiniz. Alternativ olaraq, @testing-library/react-native
kitabxanasında olan fireEvent
köməkçisindən istifadə edə bilərsiniz.
End-to-end testləri icra etmək üçün Cypress, puppeteer və webdriver alətləri faydalıdır.
Testlər yazdıqda test mühitində ekvivalenti olmayan kod parçalarını mok etmək lazım ola bilər (məsələn, Node.js-də navigator.onLine
statusu yoxlamaq kimi). Testlər ilə bəzi funksiyaları "spy" edib testin digər hissələrinin bu funksiyalar ilə necə işlədiyini müşahidə etmək mümkündür. Bu funksiyaları mok edərək test mühitinə uyğun versiyalarını düzəltmək faydalıdır.
Bu, xüsusilə məlumat yüklənməsi üçün faydalıdır. Real API nöqtələrindən məlumatların yüklənməsi testləri yavaşladır deyə testləri "saxta" məlumat ilə yazmaq daha sərfəlidir (nümunə). Əlavə olaraq, saxta məlumat ilə testlər daha proqnozlaşdırıla biləndir. Jest və sinon kimi kitabxanalar ilə funksiyaları mok etmək mümkündür. End-to-end testlərdə şəbəkəni mok etmək daha çətin olur. Lakin, bu testlərdə real API nöqtələrindən istifadə etmək daha faydalıdır.
Bəzi komponentlər test mühitində yaxşı işləməyən modullardan istifadə edə bilər və ya testlər üçün vacib olmaya bilər. Bu modulları uyğun əvəzetmələr ilə mok etmək faydalı ola bilər (nümunə).
Node.js-də Jest kimi icra edicilərdə modulların mok edilməsi dəstəklənir. Siz, həmçinin mock-require
kimi kitabxanalardan istifadə edə bilərsiniz.
Komponentlər setTimeout
, setInterval
və ya Date.now
kimi funksiyalardan istifadə edə bilərlər. Test mühitlərində bu funksiyaları, zamanı əl ilə "qabağa çəkə bilən" əvəzetmələri ilə mok etmək faydalı ola bilər. Bu, testlərin tez işləməsinə imkan yaradır! Taymerlərdən asılı olan testlər yeni sıra ilə daha tez həll olunacaq (nümunə). Jest, sinon və lolex kimi freymvorklar taymerləri mok etməyə imkan yaradır.
Bəzən, taymerləri mok etmək lazım olmaya bilər. Məsələn, bəzən animasiyaları və ya vaxta həssas olan (API sürəti məhdudlaşdırıcısı kimi) API nöqtələri ilə interaksiyalar test etikdə taymerləri mok etmək faydalı deyil. Taymerləri mok edən kitabxanalar, mokları hər test/test dəsti üçün aktivləşdirməyə və ya ləğv etməyə imkan yaradır. Bu səbəbdən, siz hər testin necə işləyəcəyini seçə bilərsiniz.
Biznesiniz üçün kritiki olan uzun axınları (məsələn, registrasiya və ya ödəmələr kimi) test etmək üçün End-to-end testlər faydalıdır. Bu testlərdə applikasiyanın brauzerdə render edilməsi, məlumatların real API-dan yüklənməsi, sessiya və kukilərdən istifa, və linklər arasında naviqasiyalar test edilir. Əlavə olaraq, DOM vəziyyəti üzərində iddialardan əlavə, gələn məlumat (məsələn, yeniliklərin database-ə yazılmasının test edilməsi) da test edilir.
Belə ssenarilər üçün kimi Cypress freymvorkdan və ya puppeteer kimi kitabxanalardan istifadə edərək fərqli linklərə naviqasiya edib yalnız brauzer yan effektlərini yox, backend yan effektlərini də test edə bilərsiniz.