Cum să scrieți corect teste în javascript pentru clase și metodele acestora

Există o neînțelegere a procesului de scriere a testelor corecte.

Procesul este simplu. Formalizăm cazul de testare, descriu-l sub forma unui test. Și trebuie să faceți acest lucru pentru ca testele să nu știe nimic despre implementarea obiectului nostru, legat exclusiv de interfață. Apoi nu va exista aproape nicio cheltuială pentru a scrie și a întreține testele.

Am adăugat produsul și ce ar trebui să monitorizez?

Obiectul dvs. ar trebui să aibă o metodă publică care să ofere un control.

Dacă nu există o astfel de metodă, atunci trebuie să înlocuim lista cu mok, dar codul dvs. nu permite acest lucru. Din nou, acesta este deja un test pentru punerea în aplicare a legării și, prin urmare, testele noastre se înrăutățesc. Dar din moment ce am parcurs această cale, putem măsura pur și simplu lungimea.

În primul punct, sunt de acord cu dvs., dar acest lucru se referă la obiect și am dificultăți în înțelegerea metodelor de testare.
Și la cel de-al doilea punct, oferiți agregare în loc de compoziție, astfel încât atunci când inițializați fabrica, înlocuiți foaia? În realitate, fac acest lucru și, în același timp, pentru a verifica metoda insertProduct, aș face următoarele -
- inspectat insertProduct pentru excepție a avut loc
- a verificat ce a trecut la metoda hasItem
- a verificat că a fost returnat de la hasItem
- verificat că a fost trecut în inserItem
- Mai mult nu aș verifica, pentru că în etapa anterioară am scris un test pentru listă și m-am asigurat că atunci când adaug că se întâmplă așa cum am nevoie
- Aș verifica insertProduct la apel cu excepția

Deci, trebuie să testați metode? Este ceva de adăugat?
Cunosc acest lucru din cauza faptului că de foarte multe ori petrec trei până la patru ori mai mult timp scriind testul decât codul însuși. Poate că acest lucru se datorează faptului că nu m-am obișnuit încă să le scriu, dar există și gânduri pe care le detaliem prin ele.
Totusi, exista un sentiment de "picior al cincilea" cand scriu un test pentru lista pe care o scriu din nou in compozitie cu testul pentru Fabrica. Apoi, schimbând o proprietate în listă, ar trebui să schimb toate testele care au fost scrise fără această proprietate. Și subliniez din nou că aceasta este atunci când testarea metodelor.

copal. determinati ca testati, listati sau fabrica? În scriptul dvs., toate aceste verificări nu sunt necesare, deoarece aceasta este deja o implementare a listei, nu ar trebui să știți nimic despre aceasta. Punerea în aplicare a acestei piese este deja acoperită cu teste. Puteți înlocui complet lista cu mok și urmăriți numai lucrarea metodei dvs. cu acest obiect.

Ei bine și da, nu mergeți în cicluri în "pentru a testa o metodă". Testați comportamentul verificând starea finală. Starea finală păstrează obiectul.

În cazul tău, nici măcar nu aș acoperi această unitate cu teste, pentru că este trivială. În schimb, aș adăuga un test de integrare care testează funcționalitatea generală.

Dacă urmați scriptul dvs., atunci vom avea un test de 100% cu privire la modul în care funcționează implementarea metodei. Și acest lucru nu este foarte bun, deoarece pentru fiecare strănut va trebui să testați testele. Ei bine, asta înseamnă că echilibrul trebuie să fie respectat cumva.