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övsiyyələrdən danışacağıq.

Test icra ediciləri

Jest, mochaava 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ə modultaymerlə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ö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 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ə) 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, puppeteerwebdriver 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. Jestsinon 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, sinonlolex 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əlumat (məsələn, yeniliklərin database-ə yazılmasının test edilməsi) 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.