JavaScript Asserzione di base


Esempio

Al suo livello più elementare, il test unitario in qualsiasi lingua fornisce asserzioni su alcuni risultati noti o previsti.

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

Il popolare metodo di asserzione sopra ci mostra un modo facile e veloce per affermare un valore nella maggior parte dei browser Web e degli interpreti come Node.js con praticamente qualsiasi versione di ECMAScript.

Un buon test unitario è progettato per testare un'unità discreta di codice; di solito una funzione.

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

Nell'esempio sopra, il valore restituito dalla funzione add(x, y) o 5 + 20 è chiaramente 25 , quindi la nostra asserzione di 24 dovrebbe fallire e il metodo asser registrerà una riga "fail".

Se modifichiamo semplicemente il risultato previsto per l'asserzione, il test avrà esito positivo e l'output risultante sarà simile a questo.

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

console output:

> pass: should return 25...

Questa semplice asserzione può assicurare che in molti casi diversi, la funzione "aggiungi" restituirà sempre il risultato previsto e non richiede strutture o librerie aggiuntive per funzionare.

Un set di asserzioni più rigoroso sarebbe simile a questo (usando var result = add(x,y) per ogni asserzione):

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...');

E l'output della console sarebbe questo:

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

Ora possiamo tranquillamente dire che add(x,y) ... dovrebbe restituire la somma di due interi . Possiamo sistemarli in qualcosa del genere:

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;

    }
}