JavaScript Assertion de base


Exemple

À son niveau le plus élémentaire, le test unitaire dans n'importe quel langage fournit des assertions contre certains résultats connus ou attendus.

function assert( outcome, description ) { 
    var passFail = outcome ? 'pass' : 'fail'; 
    console.log(passFail, ': ', description);
    return outcome;
};

La méthode d'assertion courante ci-dessus nous montre un moyen rapide et facile d'affirmer une valeur dans la plupart des navigateurs Web et des interpréteurs comme Node.js avec pratiquement n'importe quelle version d'ECMAScript.

Un bon test unitaire est conçu pour tester une unité de code discrète; généralement une fonction.

function add(num1, num2) { 
    return num1 + num2; 
} 
 
var result = add(5, 20); 
assert( result == 24, 'add(5, 20) should return 25...'); 

Dans l'exemple ci-dessus, la valeur de retour de la fonction add(x, y) ou 5 + 20 est clairement 25 , donc notre assertion de 24 devrait échouer et la méthode assert enregistrera une ligne "échec".

Si nous modifions simplement notre résultat d'assertion attendu, le test réussira et la sortie résultante ressemblera à ceci.

assert( result == 25, 'add(5, 20) should return 25...');

console output:

> pass: should return 25...

Cette simple assertion peut garantir que dans de nombreux cas différents, votre fonction "Ajouter" renverra toujours le résultat attendu et ne nécessite aucun framework ou bibliothèque supplémentaire pour fonctionner.

Un ensemble d'assertions plus rigoureux ressemblerait à ceci (en utilisant var result = add(x,y) pour chaque assertion):

assert( result == 0, 'add(0, 0) should return 0...');
assert( result == -1, 'add(0, -1) should return -1...');
assert( result == 1, 'add(0, 1) should return 1...');

Et la sortie de la console serait la suivante:

> pass: should return 0...
> pass: should return -1...
> pass: should return 1...

Nous pouvons maintenant affirmer que add(x,y) … devrait retourner la somme de deux entiers . Nous pouvons les transformer en quelque chose comme ceci:

function test__addsIntegers() {

    // expect a number of passed assertions
    var passed = 3;

    // number of assertions to be reduced and added as Booleans
    var assertions = [

        assert( add(0, 0) == 0, 'add(0, 0) should return 0...'),
        assert( add(0, -1) == -1, 'add(0, -1) should return -1...'),
        assert( add(0, 1) == 1, 'add(0, 1) should return 1...')

    ].reduce(function(previousValue, currentValue){

        return previousValue + current;

    });

    if (assertions === passed) {

        console.log("add(x,y)... did return the sum of two integers");
        return true;

    } else {

        console.log("add(x,y)... does not reliably return the sum of two integers");
        return false;

    }
}