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 utilitzantsetTimeouti cridi elcallbackamb el valor'dades'. - Escriu una prova per verificar que el
callbackrep 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
