Tests d'intégration JavaScript avec Docker : niveau avancé

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Tests d'intégration JavaScript avec Docker : niveau avancé



Les tests d'intégration sont une étape clé du développement d'applications web modernes. Ils permettent de vérifier l'interaction entre les différents composants du système : base de données, cache, API externes et l'application elle-même. Docker rend ce processus prévisible, isolé et reproductible. Dans cet article, nous aborderons les techniques avancées de tests d'intégration JavaScript (Node.js) avec Docker.



Pourquoi Docker dans les tests d'intégration ?

Les tests d'intégration traditionnels rencontrent des problèmes :

  • Différences entre les environnements de développement, CI et production.
  • Pollution des données dans les bases de données partagées.
  • Complexité du lancement des dépendances (Redis, PostgreSQL, Kafka).

Docker résout ces problèmes en fournissant des conteneurs légers et isolés. Chaque test peut lancer sa propre infrastructure et la détruire après son exécution. Cela garantit des résultats propres et reproductibles.



Configuration de l'environnement de test avec Docker Compose

Pour les tests avancés, nous utiliserons un fichier docker-compose.yml qui décrit tous les services nécessaires aux tests : l'application elle-même, la base de données, le cache et les serveurs mock.



Exemple de docker-compose.test.yml :

version: '3.8'services:  app:    build: .    environment:      - NODE_ENV=test      - DB_HOST=postgres_test      - REDIS_HOST=redis_test      - MOCK_SERVER_URL=http://mock-server:8080    depends_on:      - postgres_test      - redis_test      - mock-server    command: ["npm", "run", "test:integration"]

postgres_test: image: postgres:15-alpine environment: POSTGRES_DB: testdb POSTGRES_USER: test POSTGRES_PASSWORD: test tmpfs: /var/lib/postgresql/data

redis_test: image: redis:7-alpine tmpfs: /data

mock-server: image: mockserver/mockserver:latest environment: MOCKSERVER_LOG_LEVEL: ERROR


Points clés :

  • tmpfs : les données de la base de données et de Redis sont stockées en mémoire vive, ce qui accélère les tests.
  • mock-server : service isolé pour simuler les API externes.
  • NODE_ENV=test : bascule l'application vers la configuration de test.


Rédaction de tests d'intégration avec Testcontainers

La bibliothèque testcontainers pour Node.js permet de gérer les conteneurs par programmation directement depuis les tests. Cela offre une flexibilité : vous pouvez lancer des conteneurs spécifiques pour chaque ensemble de tests.



Installation :

npm install --save-dev testcontainers


Exemple de test avec PostgreSQL :

const { GenericContainer } = require('testcontainers');const { Client } = require('pg');

describe('User Repository Integration Test', () => { let container; let client;

beforeAll(async () => { // Lancement du conteneur PostgreSQL container = await new GenericContainer('postgres:15-alpine') .withEnvironment({ POSTGRES_DB: 'testdb', POSTGRES_USER: 'test', POSTGRES_PASSWORD: 'test' }) .withExposedPorts(5432) .start();

// Connexion au conteneur client = new Client({ host: container.getHost(), port: container.getMappedPort(5432), database: 'testdb', user: 'test', password: 'test' }); await client.connect();

// Création du schéma await client.query(` CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) UNIQUE ) `); });

afterAll(async () => { await client.end(); await container.stop(); });

test('should insert and retrieve user', async () => { await client.query(

Blogs

Book Recommendations