Les tests

Différents types de tests

Tests unitaires

Tests fonctionnels

Tests d'intégration

Le principe

S'assurer que le code fonctionne

Eviter les régressions

S'adapter plus facilement (voir TDD)

Ce qu'on ne teste pas

  • Si ce qui va autour fonctionne (librairies, frameworks, la BDD, etc)
  • Les fonctions non-déterministes

AAA

Arrange : on met en place ce dont on a besoin

Act : on lance une action

Assert : on vérifie que tout se passe comme prévu

TDD

Test-Driven Development

  • On écrit le test
  • On écrit le code correspondant
  • On itère jusqu'au résultat attendu
  • On peaufine

Exemple : la calculatrice en JS

Ce qu'on va (re)voir

(Node)JS

Mocha

Les imports et exports

Le cas de base

On implémente l'addition ensemble puis vous ferez la division

calc.js

exports.add = (a, b) => {
    if (Number.isInteger(a) && Number.isInteger(b)) {
        return a + b;
    } else {
        throw Error("Invalid input");
    }
};

calcTest.js

const calc = require("../src/calc");
const assert = require("assert");

describe("Test de la calculatrice", () => {
    describe("Test de l'addition", () => {
        it("Additionner deux nombres avec succès", () => {
            assert.equal(calc.add(1, 1), 2);
        })
        it("Devrait renvoyer une erreur si on passe autre chose qu'un entier", () => {
            assert.throws(() => calc.add("A", 1), {
                name: 'Error',
                message: 'Invalid input'
            });
        })
    })
})

Petite parenthèse

exports/require : NodeJS

import/export: ES6

Ressources

Aller plus loin

[Grafikart] Spy, mock et stub avec Sinon

On peut aussi tester directement le comportement dans le navigateur :

(ce qui peut sacrément faciliter la vie pour certains tests fonctionnels)

Les tests

By LauDev