de Nitish Phanse

Cum vă puteți testa aplicațiile Node.js cu Ava.js

Cum va puteti testa aplicatiile Nodejs cu Avajs

De ce ați dori oricum să scrieți teste pentru aplicațiile dvs.? Ei bine, este o întrebare pe care unii dezvoltatori încearcă să o evite, doar pentru că necesită efort și timp și pentru că testarea manuală este mult mai satisfăcătoare. Faceți clic pe … faceți clic pe … completați un formular … Faceți clic pe … Presto. Aplicația mea funcționează, API-urile mele sunt bune, totul este dory.

Avansați rapid la aproape 30 de cereri de extragere pe zi, fiind combinate în filiala dvs. principală. Acum, ce părere aveți despre testarea manuală a 30 de funcții sau refacerea unui bloc de cod și încălcarea codului altcuiva, fără să știți?

În acest moment, ați spune în mod normal „Aș vrea să încep câteva cazuri de testare”. Așadar, inspirați-vă de pe Facebook: au distribuit un articol destul de cool Aici, explicând modul în care echipa a dezvoltat React 16 cu dezvoltarea test-driven.

Aplicațiile nodurilor de la sine sunt destul de ușor de construit. Există o mulțime de sprijin comunitar implicat și, de obicei, veți obține ceea ce aveți nevoie întrebând în jur. Aplicațiile nod pot fi un server proxy excelent pentru o serie de servere API, făcând astfel testarea punctelor finale mai crucială.

În acest articol am tratat cum se configurează și se scriu cazuri de test de unitate de bază cu rapoarte de acoperire pentru aplicațiile Node.js. Deci, să sărim înăuntru.

Bună ziua Ava

Ava este un tester JavaScript. Folosește natura I / O asincronă a nodului și rulează teste concurente, reducând astfel timpul de testare.

Să începem

În directorul dvs. de lucru, creați un fișier package.json fișier și adăugați următoarele pachete:

yarn add ava babel-register

Creeaza o teste pliant. Este util să vă păstrați testele într-un singur loc. Puteți păstra și module de control / controlere acolo.

Actualizat package.json ar trebui să arate acum așa:

{  "name": "ava-test",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "start" : "node server.js",    "test": "node_modules/.bin/ava tests/**/*.test.js --verbose",    "test:watch": "node_modules/.bin/ava --verbose --watch"  },  "dependencies": {    "ava": "^0.23.0",    "babel-register": "^6.26.0"  },  "ava": {    "require": [      "babel-register"    ]  }}

babel-register transpune codul ES6 în timpul rulării în cazul în care unele mașini rulează pe o versiune de nod veche care nu acceptă ES6. verbose pavilion ne va oferi o ieșire ordonată în funcție de testele noastre eșuează sau trec. Acest semnal este destul de util în timpul depanării testelor, dar dacă scrieți sute de cazuri de testare, vă recomandăm să îl dezactivați.

În dumneavoastră tests/index.test.js, puteți adăuga primul caz de testare:

Lucrul la îndemână despre Ava este că vă permite să rulați teste asincronizate, prin funcții de așteptare asincronizate. Sintaxa este, de asemenea, destul de simplă. Metoda planului ne permite să menționăm în mod explicit numărul de afirmații pe care am dori să le avem pe test.

Alergare yarn test de pe consola dvs. vă oferă următoarea ieșire:

1612033026 487 Cum va puteti testa aplicatiile Nodejs cu Avajs

În cazul în care unul dintre testele noastre nu reușește, vom primi:

1612033027 274 Cum va puteti testa aplicatiile Nodejs cu Avajs

Asta e frumusețea verbose modul. Acesta vă oferă o stivă de eroare curată și niciunul din urmele de junk. În cazul în care întâmpinați o eroare de execuție, veți vedea și câteva evidențieri frumoase ale sintaxei.

Puteți exploata cu adevărat API-ul Ava și puteți utiliza instrumentul său puternic de afirmare pentru a scrie cazuri de testare flexibile.

Configurarea serverului Node

Până acum, am vorbit doar despre o configurare de bază pentru scrierea testelor – și să fim sinceri, este destul de simplă. Deci, în această secțiune, voi explica modul în care un server Node simplu poate fi separat și punctele sale finale testate cu Ava.

yarn add express body-parser 

În directorul dvs. de lucru, creați un fișier app.js și adăugați următorul fragment:

Motivul pentru care am exportat modulul aplicației este astfel încât să poată fi utilizat cu serverul API simulat de care Ava va avea nevoie pentru a rula testele.

Creați un fișier nou server.js și importați modulul aplicației pentru a porni serverul.

Rularea startului npm ar trebui să pornească serverul dvs. și navigarea la punctul final http: // localhost / status ar trebui să vă ofere un răspuns de 200OK.

Excelent, așa că serverul nostru funcționează.

O privire rapidă a codului arată că am creat 3 puncte finale: un punct final de stare, un punct final de salut și un punct final de înregistrare. Există o anumită validare la punctul final al registrului, care aruncă 400 (cerere greșită) în cazul în care lipsesc parametrii corpului postului. Metoda de validare de mai sus este destul de naivă, dar servește scopului nostru de testare a punctelor finale – așa că o să rămân cu ea.

Sfat pentru profesioniști: puteți atribui întotdeauna gestionarea erorilor unui middleware și puteți utiliza lângă pentru a invoca gestionarul de erori.

Să scriem încă câteva teste în jurul punctului final. Voi folosi supertest modul. Este foarte asemănător cu superagent: folosește aceleași API-uri și are o sintaxă similară. Deci, câștig-câștig.

Am importat exportul anterior app modul și l-a trecut în supertest. Supertest creează un server proxy, care va atinge apoi toate adresele URL ale punctelor finale menționate în test. Puteți utiliza deepEqual metoda de testare a întregului obiect sau is metodă de testare manuală a fiecărui câmp.

Rularea testului de fire va produce următoarele:

1612033027 609 Cum va puteti testa aplicatiile Nodejs cu Avajs

Grozav. Am scris patru teste și toate reușesc conform așteptărilor. Dar ce zici de acoperirea codului?

Buna nyc

Pentru crearea acestor rapoarte minunate de acoperire, vom folosi nyc care este interfața liniei de comandă Istanbul.js. Este foarte ușor de utilizat și are o mulțime de opțiuni configurabile. Din motive de simplitate, vom folosi o configurație foarte simplă.

yarn add nyc --save

nyc comanda se înfășoară frumos peste comanda de testare și va crea un folder de acoperire (acesta ar trebui să fie în gitignore) în directorul dvs. de lucru.

Actualizați-vă package.json așa cum se arată mai jos:

{  "name": "ava-test",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "test": "node_modules/.bin/ava tests/**/*.test.js --verbose",    "test:watch": "node_modules/.bin/ava --verbose --watch",    "cover": "node_modules/.bin/nyc yarn test",  },  ... other dependencies   "nyc": {    "reporter": [      "lcov",      "text",      "html"    ]  }}

Tipurile de reporter pe care le doriți pot fi configurate în secțiunea NYC a dumneavoastră package.json fişier.

Să rulăm învelișul de fire:

1612033028 480 Cum va puteti testa aplicatiile Nodejs cu Avajs

Bine, deci nu avem încă o acoperire de 100%. Să remediem asta. Mai întâi ați dori să accesați dosarul de acoperire din directorul dvs. de lucru și să vedeți ce parte a codului dvs. nu a fost acoperită.

1612033028 274 Cum va puteti testa aplicatiile Nodejs cu Avajs

În mod clar, am ratat un loc. Să adăugăm ultimul nostru caz de test în tests/index.tests.js fișier, care va acoperi întregul app.js fişier.

test('Create a new user', async t => {  let username="some-hase"  const password = 'some-hase'  const response = await request(app)    .post('/register')    .send({username, password});
t.is(response.status, 200);    t.is(response.body.message, `new user created`);});

Si acum….

1612033029 630 Cum va puteti testa aplicatiile Nodejs cu Avajs

Presto.

Sfat profesional: Dacă doriți să adăugați un prag pentru cazurile de testare, puteți adăuga un script în fișierul package.json.

"check-coverage": "node_modules/.bin/nyc check-coverage --lines 100 --functions 100 --branches 100 --statements 100"

Această comandă poate fi executată ca parte a sistemelor de construire a conductelor travis / gitlab.

Concluzie

Am acoperit o configurare de bază cu Ava pentru cazurile de testare a unităților API-urilor dvs. de nod. Documentația este cu adevărat extinsă și poate fi menționată în caz de îndoială.

PS: Sper că îți place articolul, corectează-mă dacă greșesc oriunde. Bun venit întotdeauna la o discuție.