Architecture des Tests

Dans les vrais projets, les tests doivent être organisés clairement.

Une bonne architecture de tests permet :

Les tests sont aussi importants que le reste du programme.

1. Un test = un comportement

Une bonne pratique consiste à tester un seul comportement par fonction.

function testAdd() {

    expect(add(2, 2)).toBe(4);

}

Ici, le test vérifie uniquement la fonction add().

2. Nommage des tests

Les noms des tests doivent être clairs et explicites.

function testCreerMessagePanier() {

}

Un bon nom aide à comprendre immédiatement :

3. Regrouper les tests

Les tests sont souvent regroupés dans une fonction principale.

function tests() {

    testAdd();

    testMultiply();

}

tests();

Cette approche centralise l’exécution des validations.

4. Cas nominal

Le cas nominal représente le comportement attendu du programme.

expect(add(1, 1)).toBe(2);

Ce test valide le scénario principal.

5. Cas d’erreur

Les tests doivent aussi vérifier les cas particuliers.

expect(add(0, 0)).toBe(0);

Tester plusieurs scénarios améliore la stabilité du projet.

6. Préparer les données

Plusieurs tests doivent préparer leurs propres données.

const cart = new Map();

cart.set("patate", 1);

Cela permet de créer un contexte précis pour chaque test.

7. Isolation des tests

Les tests doivent être indépendants les uns des autres.

Un test ne devrait pas modifier les données d’un autre test.

function testCart() {

    const cart = new Map();

}

Ici, chaque test possède sa propre collection.

8. Plusieurs assertions

Une fonction de test peut contenir plusieurs assertions.

function testAdd() {

    expect(add(1, 1)).toBe(2);

    expect(add(2, 2)).toBe(4);

}

Cela permet de vérifier plusieurs scénarios similaires.

9. Exemple d’architecture

Exemple inspiré d’un vrai projet.

function testCreerMessagePanier() {

    const cartVide = new Map();

    expect(creerMessagePanier(cartVide))
        .toBe("Votre Panier est vide\n");

}

function testTraiterCommande() {

    const cart = new Map();

    traiterCommande(cart, "add patate");

    expect(cart.get("patate")).toBe(1);

}

function tests() {

    testCreerMessagePanier();

    testTraiterCommande();

}

tests();

10. Lisibilité des tests

Les tests doivent être faciles à lire.

Un développeur devrait rapidement comprendre :

11. Les tests comme documentation

Les tests servent aussi de documentation du programme.

expect(creerMessagePanier(cart))
    .toBe("1 patate\n");

Ce test montre clairement le comportement attendu.

12. Organiser les fichiers

Dans les gros projets, les tests sont souvent séparés du reste du code.

src/
tests/

Cette structure améliore l’organisation du projet.

13. Éviter les tests géants

Un test trop gros devient difficile à comprendre.

Bonne pratique :

14. Bonnes pratiques

Résumé rapide

Concept Utilité
Architecture Organisation des tests
Isolation Tests indépendants
Cas nominal Scénario principal
Cas d’erreur Scénarios particuliers
Fonction tests() Regrouper les validations
Assertions Vérifications automatiques
Nommage Tests lisibles