Les proves són una part fonamental del desenvolupament de programari, ja que asseguren que el codi funcioni com s'espera i ajuden a detectar errors abans que arribin a producció. En aquest tema, aprendrem els conceptes bàsics de les proves en Node.js, incloent-hi els tipus de proves, les eines més utilitzades i com començar a escriure proves per a les nostres aplicacions.
Conceptes Clau
Tipus de Proves
-
Proves Unitàries (Unit Tests):
- Verifiquen la funcionalitat d'una unitat individual de codi (normalment una funció o mòdul).
- Són ràpides d'executar i aïllen cada component per assegurar-se que funcioni correctament de manera independent.
-
Proves d'Integració (Integration Tests):
- Verifiquen la interacció entre diferents mòduls o serveis.
- Asseguren que els components funcionin correctament quan es combinen.
-
Proves de Sistema (System Tests):
- Verifiquen el sistema complet en un entorn que simula la producció.
- Inclouen proves d'extrem a extrem (end-to-end) que simulen el comportament de l'usuari.
-
Proves de Regressió (Regression Tests):
- Asseguren que els canvis o actualitzacions en el codi no introdueixin nous errors en funcionalitats ja existents.
Eines de Proves en Node.js
-
Mocha:
- Un framework de proves flexible i extensible per a Node.js.
- Permet escriure proves de manera senzilla i estructurada.
-
Chai:
- Una biblioteca d'assertions que es pot utilitzar amb Mocha.
- Proporciona una sintaxi llegible per escriure assertions.
-
Sinon:
- Una biblioteca per crear espies (spies), mocks i stubs.
- Ajuda a simular el comportament de funcions i mòduls per aïllar les proves.
Configuració de l'Entorn de Proves
Instal·lació de Mocha i Chai
Per començar a escriure proves en Node.js, primer hem d'instal·lar Mocha i Chai. Utilitzarem npm per instal·lar aquestes eines.
Estructura del Projecte
És recomanable tenir una estructura clara per a les proves dins del projecte. Una estructura típica podria ser:
Escriure la Primera Prova
Exemple de Prova Unitària amb Mocha i Chai
Suposem que tenim una funció sum
en el nostre fitxer index.js
que volem provar.
src/index.js:
Ara, escriurem una prova per a aquesta funció.
test/index.test.js:
const chai = require('chai'); const expect = chai.expect; const sum = require('../src/index'); describe('Funció sum', () => { it('hauria de retornar la suma de dos nombres', () => { const result = sum(2, 3); expect(result).to.equal(5); }); it('hauria de retornar un nombre negatiu si la suma és negativa', () => { const result = sum(-2, -3); expect(result).to.equal(-5); }); });
Executar les Proves
Per executar les proves, afegirem un script al nostre package.json
:
package.json:
Ara podem executar les proves amb el següent comandament:
Exercicis Pràctics
Exercici 1: Provar una Funció de Multiplicació
- Crea una funció
multiply
en un fitxersrc/multiply.js
que multipliqui dos nombres. - Escriu una prova per a la funció
multiply
en un fitxertest/multiply.test.js
.
Solució:
src/multiply.js:
test/multiply.test.js:
const chai = require('chai'); const expect = chai.expect; const multiply = require('../src/multiply'); describe('Funció multiply', () => { it('hauria de retornar el producte de dos nombres', () => { const result = multiply(2, 3); expect(result).to.equal(6); }); it('hauria de retornar zero si un dels nombres és zero', () => { const result = multiply(0, 5); expect(result).to.equal(0); }); });
Resum
En aquesta secció, hem après els conceptes bàsics de les proves en Node.js, incloent-hi els tipus de proves i les eines més utilitzades. Hem configurat l'entorn de proves amb Mocha i Chai, i hem escrit la nostra primera prova unitària. A més, hem practicat escrivint proves per a una funció de multiplicació. En el següent tema, aprofundirem en les proves unitàries amb Mocha i Chai, i explorarem com escriure proves més complexes.
Curs de Node.js
Mòdul 1: Introducció a Node.js
Mòdul 2: Conceptes Bàsics
Mòdul 3: Sistema de Fitxers i I/O
Mòdul 4: HTTP i Servidors Web
Mòdul 5: NPM i Gestió de Paquets
Mòdul 6: Framework Express.js
- Introducció a Express.js
- Configuració d'una Aplicació Express
- Middleware
- Routing en Express
- Gestió d'Errors
Mòdul 7: Bases de Dades i ORMs
- Introducció a les Bases de Dades
- Utilitzar MongoDB amb Mongoose
- Utilitzar Bases de Dades SQL amb Sequelize
- Operacions CRUD
Mòdul 8: Autenticació i Autorització
Mòdul 9: Proves i Depuració
- Introducció a les Proves
- Proves Unitàries amb Mocha i Chai
- Proves d'Integració
- Depuració d'Aplicacions Node.js
Mòdul 10: Temes Avançats
Mòdul 11: Desplegament i DevOps
- Variables d'Entorn
- Utilitzar PM2 per a la Gestió de Processos
- Desplegar a Heroku
- Integració i Desplegament Continu