Test Etmə Mühitləri
Bu sənəddə mühitə təsir edə bilən amillərdən və bəzi ssenarilər üçün tövsiyələrdən danışacağıq.
Test icra ediciləri
Jest, mocha və ava kimi test işləyiciləri test dəstlərinin sadə JavaScript kimi yazılmasına və bu testlərin 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ə əlavə konfiqurasiya etmədən 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ə arasında olan axını test etmək üçün end-to-end testlər işlənilir. Bu testlər üçün fərqli quraşdırma lazımdır.
Render sahəsinin mok edilməsi
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övsiyə 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 sürətli olacaq. Ə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ərinin böyük hissəsi göstərilən 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ərini test etdikdə) 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.
Funksiyaların mok edilməsi
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 qəbul edən testləri proqnozlaşdırmaq asanlaşır. 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.
Modulların mok edilməsi
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ərlə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.
Taymerlərin mok edilməsi
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 eyni çağrılma sırasını qoruyaraq 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ərin mok edilməsi faydasız ola bilər. 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 idarə edə bilərsiniz.
End-to-end testlər
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 istifadə və linklər arasında naviqasiyalar test edilir. Əlavə olaraq, DOM vəziyyəti üzərində iddialardan əlavə gələn məlumatlar (məsələn, yeniliklərin database-ə yazılmasının yoxlanılması) da test edilir.
Belə ssenarilər üçün Cypress kimi freymvorklardan 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.