Javascript unit testing

Salut,

Sunt frontend developer de aproximativ 4 ani. La inceput eram axat mai mult pe partea de photoshop -> html + css, dar in ultimii trei ani am lucrat exclusiv cu javascript (spa, backbone + plugins). Apropo, lucrez singur la acest proiect, asa ca am facut destule greseli.

Folosesc gulp + browserify si scriu module common js, fara es5. Problema e ca am un proiect destul de mare, sau in orice caz, destul de complex si cei de la munca insista abia acum sa scriu unit tests si teste ui automate. pe partea de ui, a fost destul de simplu, dar as vrea sa scriu unit test macar pentru 50% din cod. cu cat mai mult cu atat mai bine.

Problema care o am e ca desi mi-am structurat codul destul de modular, in module, models, view si controllers, utilities si am cam incercat sa folosesc cod la maxim, am inca parti de cod foarte greu de testat.

Ca idee, un exemplu de modul javascript pe care l-am scris incepe cu o multime de “require”, si la urma module.exports o functie, sau un obiect pe care le folosesc in alte module.

Problema e cand vreau sa testez un astfel de modul, am nevoie sa fake/mock multe dintre dependintele pentru modulul in cauza. As dori asadar, niste pattern-uri sau idei cum sa imi imbunatatesc codul, pentru a putea fi mai usor de testat.

Sunt inca junior, am multe lacune, asa ca cu cat mai multe explicatii, cu atat mai bine, dar ca idee, e exclus sa rescriu codul sau sa folosesc alte framework-uri. Mc. in avans!

2 Likes

Problema cu unit testingul e că e vorba de a testa un singur lucru deodată, singura ta soluție este refactoring la tot ce nu e unitar cu TDD. Reduci codul la minimul necesar la ce știi că poți sigur testa cu jest pe unități și după rescrii totul pe baza erorilor, primești o eroare, scrii un test și o solutie, continui până ai sistemul refăcut.

Răspunsul tău trebuie să fie că îți ia mai mult să îți testezi codul existent decât să îl rescrii de la 0. Și eu am vreo 10 proiecte pe care ar trebui să le refac tot așa dar încă n-a fost necesar. Mai bine treci la următorul proiect și lasă pe altcineva să facă testele dacă au bani de aruncat pe fereastră dacă nu le-ai făcut din start. :slight_smile:

2 Likes

ma voi uita un pic la jest. problema nu e neaparat framework-ul in sine ce codul meu care e destul de greu de testat momentan. ce am inceput sa fac, dar nu stiu cat e de bine e sa injectez dependintele intr-un mod foarte rudimenta/original aka extind modulul in cauza cu ce am necesar. cand voi testa modulul, voi inlocui deoendintele respective cu mock-uri ca sa pot testa doar modulul in cauza.

e foarte neproductiv sa lucrez singur, dar intr-un fel si invat din greseli.

mc de raspuns

am vrut sa spun “fara es6”

Poti incerca sa faci teste pentru bucatile care-s usor de testat - functii utilitare, module fara dependinte prea mari etc. Apoi sunt un numar de module centrale pe care vrei sa le ai testate - chestii care daca sunt stricate inseamna ca ai probleme foarte mari.

In rest, sa incepi sa adaugi unit-tests atat de tarziu in viata unui proiect e destul de contra-productiv. In primul rand ca oarecum exista un test implicit - anume ca sistemul merge si utilizatorii nu se plang de el. Asa ca ce teste ai adauga ar fi pentru confirmare mai mult decat pentru preventie. In al doilea rand, dupa cum spui si tu, codul facut cu TDD sau tehnici asemanatoare are o anumita structura. Daca n-ai urmat-o o sa fie o lupta mare sa-l aduci la forma aia. Si din nou, cu un payoff discutabil.

Servicii de code-coverage pot sa te ajute sa urmaresti progresul si sa ai un fel de feedback usor pentru schimbarile pe care le faci. Desi trebuie sa permita procesul de build o integrare OK a lor.
Eu mai folosesc https://codecov.io/gh pentru treaba asta.

2 Likes

Daca ai acoperire buna pe partea de teste ui/integration atunci esti ok. Aduc cea mai mare valoare de business deoarece se mapeaza direct pe ceea ce executa clientul in interfata.
Unit testing te poate ajuta la verificarea unor situatii limita cand poti sa mockuiesti ce/cum vrei astfel incat sa poti simula situatii exceptionale dar ca valoare de business din punctul meu de vedere e mic.

2 Likes