Skip to content

Latest commit

 

History

History
58 lines (33 loc) · 7.78 KB

testing-environments.md

File metadata and controls

58 lines (33 loc) · 7.78 KB
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.

Test icra edicilər {#test-runners}

Jest, mochaava 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ə modultaymerlə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.

Render sahəsinin mok edilməsi {#mocking-a-rendering-surface}

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, puppeteerwebdriver alətləri faydalıdır.

Funksiyaların mok edilməsi {#mocking-functions}

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. 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 {#mocking-modules}

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.

Mocking timers {#mocking-timers}

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, 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ə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.

End-to-end testlər {#end-to-end-tests-aka-e2e-tests}

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.