2015-08-12 19 views
9

Utilizzo di mocha per eseguire test dell'unità node.js I get ad es. questa uscita:Perché Mocha non segnala il tempo per ogni test?

Suite One: 
    call Home Page 
    √ should return correct result (65ms) 
    call Login Page 
    √ should return empty load 
    do Login 
    √ should return login details (53ms) 
    call Dashboard 
    √ should return empty load 

    6 passing (192ms) 

Perché per due casi di test ho il tempo di prova (65/53 ms), ma non per gli altri due casi? C'è una certa opzione? Ho trovato solo --slow ma niente di più.

Add: se i test sono lenti, ho orari per tutti i casi di test:

Suite One: 
call Home Page 
    √ should return correct result (1155ms) 
call Login Page 
    √ should return empty load (359ms) 
do Login 
    √ should return login details (703ms) 
call Dashboard 
    √ should return empty load (347ms) 

a quanto pare, se i casi di test sono molto veloci, tanto sono senza tempo ..?

risposta

20

Il comportamento rilevato è il comportamento predefinito di Mocha. Se non diversamente specificato, quando si esegue Mocha sulla riga di comando, si ottiene il reporter spec (il cui nome classe è Spec).

Tutti i giornalisti in bundle con la moka si basano sul Base giornalista, che ha questo codice:

runner.on('pass', function(test){ 
    stats.passes = stats.passes || 0; 

    var medium = test.slow()/2; 
    test.speed = test.duration > test.slow() 
     ? 'slow' 
     : test.duration > medium 
     ? 'medium' 
     : 'fast'; 

    stats.passes++; 
    }); 

Si può vedere lì che i test che prendono più del numero di millisecondi ritenuti lento (opzione --slow al comando linea, 75 ms predefiniti) sono contrassegnati come slow. Quelli che impiegano più della metà di questo tempo sono contrassegnati come medium e quelli che richiedono meno di questo sono contrassegnati con fast.

Il codice per la Spec giornalista fa questo:

runner.on('pass', function(test){ 
    if ('fast' == test.speed) { 
     var fmt = indent() 
     + color('checkmark', ' ' + Base.symbols.ok) 
     + color('pass', ' %s '); 
     cursor.CR(); 
     console.log(fmt, test.title); 
    } else { 
     var fmt = indent() 
     + color('checkmark', ' ' + Base.symbols.ok) 
     + color('pass', ' %s ') 
     + color(test.speed, '(%dms)'); 
     cursor.CR(); 
     console.log(fmt, test.title, test.duration); 
    } 
    }); 

Questo codice viene eseguito dopo quello nella Base giornalista (Base inizializza prima Spec). Pertanto, quando viene eseguito il gestore nel frammento di codice precedente, il test è stato contrassegnato come slow, medium o fast. Come puoi vedere, Mocha riporterà il tempo solo se il test non è veloce.

È possibile espandere il numero di casi in cui Mocha riporterà il tempo passando --slow 0 alla riga di comando. (--slow -1 disattiva completamente il tempo di segnalazione.) Tuttavia, in teoria è ancora possibile ottenere test che richiedono 0ms, e questi test saranno considerati rapidi e non avranno alcun tempo riportato.

Se si desidera forzare la segnalazione del tempo per ogni test e utilizzare un reporter che funzioni come il reporter spec, non vedo un modo per farlo se non utilizzando il proprio reporter personalizzato.

+1

Grazie mille! Ampio e chiaro – Rainer