Les proves d'integració són un tipus de proves de programari que verifiquen si diferents mòduls o serveis d'una aplicació funcionen correctament quan es combinen. Aquestes proves són crucials per assegurar-se que els components de l'aplicació interactuen correctament entre ells.
Objectius de les Proves d'Integració
- Verificar la Interacció entre Mòduls: Assegurar-se que els mòduls o serveis es comuniquen correctament.
- Detectar Problemes d'Integració: Identificar errors que poden sorgir quan els components es combinen.
- Assegurar la Funcionalitat Completa: Garantir que l'aplicació funcioni com s'espera en un entorn real.
Configuració de l'Entorn de Proves
Instal·lació de Dependències
Per realitzar proves d'integració en Node.js, utilitzarem Mocha com a framework de proves i Chai com a biblioteca d'assertions. També utilitzarem Supertest per fer peticions HTTP a la nostra aplicació.
Estructura del Projecte
Organitza el teu projecte de manera que les proves estiguin separades del codi de producció. Una estructura típica podria ser:
/project-root /src /controllers /models /routes app.js /test /integration example.test.js package.json
Exemple Pràctic: Proves d'Integració d'una API
- Crear una API Simple
Primer, crearem una API simple amb Express que tingui un endpoint /users
que retorni una llista d'usuaris.
app.js:
const express = require('express'); const app = express(); app.get('/users', (req, res) => { res.status(200).json([{ id: 1, name: 'John Doe' }]); }); module.exports = app;
server.js:
const app = require('./app'); const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`Server running on port ${port}`); });
- Escriure Proves d'Integració
Ara, escriurem una prova d'integració per assegurar-nos que l'endpoint /users
funciona correctament.
test/integration/example.test.js:
const request = require('supertest'); const app = require('../../src/app'); const { expect } = require('chai'); describe('GET /users', () => { it('should return a list of users', (done) => { request(app) .get('/users') .expect('Content-Type', /json/) .expect(200) .end((err, res) => { if (err) return done(err); expect(res.body).to.be.an('array'); expect(res.body[0]).to.have.property('id'); expect(res.body[0]).to.have.property('name'); done(); }); }); });
- 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:
Consells i Errors Comuns
Consells
- Utilitza Bases de Dades de Proves: Si la teva aplicació interactua amb una base de dades, utilitza una base de dades de proves per evitar modificar dades reals.
- Mocking i Stubbing: Utilitza eines com
sinon
per fer mock o stub de dependències externes. - Aïllament de Proves: Assegura't que les proves no depenguin unes de les altres i que es puguin executar en qualsevol ordre.
Errors Comuns
- No Netejar l'Estat: No netejar l'estat de la base de dades o altres recursos entre proves pot causar resultats inconsistents.
- Proves Massa Dependents: Les proves que depenen massa de l'estat inicial poden fallar si aquest estat canvia.
- No Verificar Tot: Assegura't de verificar totes les parts importants de la resposta, no només el codi d'estat.
Conclusió
Les proves d'integració són essencials per assegurar-se que els diferents components de la teva aplicació funcionen correctament junts. Utilitzant eines com Mocha, Chai i Supertest, pots escriure proves efectives que ajudin a mantenir la qualitat del teu programari. Recorda seguir les millors pràctiques i evitar errors comuns per obtenir els millors resultats.
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