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.

npm install --save-dev mocha

Configuració

Afegim un script al fitxer package.json per executar Mocha fàcilment.

{
  "scripts": {
    "test": "mocha"
  }
}

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.

npm install --save-dev chai

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.

npm test

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ó

  1. Crea una funció multiplicar(a, b) que retorni el producte de dos nombres.
  2. Escriu una prova per verificar que multiplicar(2, 3) retorna 6.

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

  1. Crea una funció fetchData(callback) que simuli una operació asíncrona utilitzant setTimeout i cridi el callback amb el valor 'dades'.
  2. 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

Mòdul 7: Bases de Dades i ORMs

Mòdul 8: Autenticació i Autorització

Mòdul 9: Proves i Depuració

Mòdul 10: Temes Avançats

Mòdul 11: Desplegament i DevOps

Mòdul 12: Projectes del Món Real

© Copyright 2024. Tots els drets reservats