În acest capitol vom discuta despre elementele de bază ale testelor automate. Acesta va fi aplicat în continuare în sarcini și, în general, este inclus în "minimul educațional" al programatorului.
Când scriem o funcție, de obicei reprezentăm ce ar trebui să facă, ce valoare să dăm pe ce argumente.
În procesul de dezvoltare, verificăm din când în când dacă funcția funcționează corect. Cea mai ușoară modalitate de a verifica este să o executați, de exemplu în consolă, și să vedeți rezultatul.
Dacă ceva nu merge bine, reparați-l, executați-l din nou - vedeți rezultatul ... Și așa "la final".
Dar aceste lansări manuale sunt un mijloc imperfect de verificare.
Când verificați manual codul - este ușor să îl "dezinstalați".
De exemplu, scriem funcția f. Am scris, încercăm cu argumente diferite. Funcția de apel f (a) funcționează, dar f (b) nu funcționează. Corectat codul - f (b) a început să funcționeze. cam terminat. Dar, în același timp, au uitat să testeze f (a) - ups din nou, aici este o posibilă eroare în cod.
Testarea automată este atunci când testele sunt scrise separat de cod și le puteți rula în orice moment și puteți verifica toate utilizările importante.
Vom examina metodologia de testare care este inclusă în BDD - Development Driven Behavior. Abordarea BDD a fost folosită de mult timp în multe proiecte.
BDD nu sunt doar teste. Acest lucru este mult mai mult.
Testele de BDD sunt trei în una: Și teste, Și documentație, Și exemple de utilizare.
Cu toate acestea, suficiente cuvinte. Să luăm în considerare exemple.
Să presupunem că vrem să dezvoltăm funcția pow (x, n). care ridică x la o putere întreg de n. pentru simplitate, n≥0.
Chiar înainte de dezvoltare, ne putem imagina ce va face această funcție și o vom descrie folosind tehnica BDD.
Această descriere se numește o specificație (sau, așa cum se spune în uzul zilnic, "speck") și arată astfel:
Specificația are trei elemente principale de construcție, pe care le vedeți în exemplul de mai sus:
Specifică exact ceea ce descriem, este folosit pentru a grupa "workhorses" - blochează-l. În acest caz, descriem funcția pow.
În blocul de titlu al acesteia, limba umană descrie ce ar trebui să facă funcția, apoi urmează testul. care verifică acest lucru.
Codul din interiorul lui. dacă implementarea este adevărată, trebuie executată fără erori.
Diferitele funcții ale formulei afirmate. * Sunt folosite pentru a verifica dacă pow face ceea ce este destinat. Până acum, suntem interesați doar de unul dintre ei - assert.equal. compară primul argument cu cel de-al doilea și produce o eroare atunci când acestea nu sunt egale. În acest caz, se verifică dacă rezultatul pow (2, 3) este 8.
Există și alte tipuri de comparații și verificări pe care le vom vedea mai târziu.
De obicei, fluxul de dezvoltare este după cum urmează:
- O specificație este scrisă care descrie cele mai de bază funcționale.
- Implementarea inițială se face.
- Pentru a verifica conformitatea cu specificația, vom folosi cadrul (în cazul nostru, Mocha). Cadrul rulează toate testele și afișează erori dacă apar. Când erorile sunt corectate.
- Specificația se extinde, adăugând caracteristici care, deocamdată, pot să nu fie suportate de implementare.
- Mergem la punctul 2, facem o implementare. Și așa "până la capătul victorios".
Dezvoltarea se desfășoară în mod iterativ. Un pas după altul până când specificația și punerea în aplicare sunt finalizate.
În cazul nostru, primul pas a fost deja finalizat, specificația inițială este gata, ar fi bine să începeți implementarea. Dar, înainte de aceasta, vom "zero" caietul de sarcini, doar pentru a vedea că deja în această formă, chiar și fără implementare - testele funcționează.
Vom folosi:
- Mocha - această bibliotecă conține funcții comune pentru testare, inclusiv descrierea și descrierea.
- Chai - biblioteca suportă o varietate de funcții pentru verificare. Există diferite "stiluri" de verificare a rezultatelor, cu care ne vom cunoaște mai târziu, în acest moment vom folosi doar assert.equal.
- Sinon - pentru emularea și înlocuirea viclenie a funcțiilor "stubs", vor fi necesare mai târziu.
Aceste biblioteci vă permit să testați JS nu numai în browser, ci și pe serverul Node.JS. Aici vom examina versiunea browserului, versiunea de server utilizează aceleași funcții.
Exemplul paginii HTML pentru teste:
Această pagină poate fi împărțită în patru părți:
- bloc - în care conectăm biblioteci și stiluri pentru testare, codul nostru nu este acolo.
- bloc