Les proves unitàries són una part essencial del desenvolupament de programari, ja que permeten verificar que les diferents parts del codi funcionen correctament de manera independent. En aquest tema, aprendrem a utilitzar Mocha i Chai per escriure i executar proves unitàries en aplicacions Node.js.
Contingut
Introducció a Mocha
Mocha és un framework de proves per a Node.js que facilita l'escriptura i l'execució de proves unitàries. Proporciona una estructura clara per definir i organitzar les proves.
Característiques de Mocha:
- Suporta proves síncrones i asíncrones.
- Permet l'ús de diferents biblioteques d'assertions com Chai.
- Proporciona informes de resultats de proves detallats.
Configuració de Mocha
Instal·lació
Per començar a utilitzar Mocha, primer hem d'instal·lar-lo com a dependència de desenvolupament en el nostre projecte Node.js.
Configuració
Afegim un script al fitxer package.json
per executar Mocha fàcilment.
Introducció a Chai
Chai és una biblioteca d'assertions que es pot utilitzar amb Mocha per escriure proves més llegibles i expressives. Chai proporciona tres estils d'assertions: assert
, expect
i should
.
Instal·lació
Instal·lem Chai com a dependència de desenvolupament.
Escriure Proves amb Mocha i Chai
Exemple Bàsic
Creem un fitxer de proves, per exemple test/example.test.js
, i escrivim una prova bàsica.
const assert = require('chai').assert; describe('Array', function() { describe('#indexOf()', function() { it('hauria de retornar -1 quan el valor no està present', function() { assert.equal([1, 2, 3].indexOf(4), -1); }); }); });
Explicació del Codi
describe
: Defineix un conjunt de proves relacionades.it
: Defineix una prova individual.assert.equal
: Comprova que dos valors són iguals.
Exemple amb expect
const expect = require('chai').expect; describe('Matemàtiques', function() { describe('#sumar()', function() { it('hauria de retornar la suma de dos nombres', function() { const suma = (a, b) => a + b; expect(suma(2, 3)).to.equal(5); }); }); });
Executar les Proves
Per executar les proves, simplement utilitzem el script que hem definit en el fitxer package.json
.
Mocha buscarà automàticament els fitxers de proves en el directori test
i executarà les proves definides.
Exercicis Pràctics
Exercici 1: Prova d'una Funció de Multiplicació
- Crea una funció
multiplicar(a, b)
que retorni el producte de dos nombres. - Escriu una prova per verificar que
multiplicar(2, 3)
retorna6
.
Solució
// multiplicar.js function multiplicar(a, b) { return a * b; } module.exports = multiplicar; // test/multiplicar.test.js const expect = require('chai').expect; const multiplicar = require('../multiplicar'); describe('Matemàtiques', function() { describe('#multiplicar()', function() { it('hauria de retornar el producte de dos nombres', function() { expect(multiplicar(2, 3)).to.equal(6); }); }); });
Exercici 2: Prova d'una Funció Asíncrona
- Crea una funció
fetchData(callback)
que simuli una operació asíncrona utilitzantsetTimeout
i cridi elcallback
amb el valor'dades'
. - Escriu una prova per verificar que el
callback
rep el valor'dades'
.
Solució
// fetchData.js function fetchData(callback) { setTimeout(() => { callback('dades'); }, 1000); } module.exports = fetchData; // test/fetchData.test.js const expect = require('chai').expect; const fetchData = require('../fetchData'); describe('Asíncron', function() { describe('#fetchData()', function() { it('hauria de retornar dades després d\'un retard', function(done) { fetchData((data) => { expect(data).to.equal('dades'); done(); }); }); }); });
Conclusió
En aquest tema, hem après a configurar i utilitzar Mocha i Chai per escriure proves unitàries en aplicacions Node.js. Hem vist com definir proves bàsiques i asíncrones, i hem practicat amb exercicis per reforçar els conceptes apresos. Les proves unitàries són una eina poderosa per assegurar la qualitat del codi i facilitar el manteniment de les aplicacions.
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