2015-08-12 7 views
9

Mit Mocha zu tun node.js Unit-Tests bekomme ich z. dieser Ausgabe:Warum meldet Mocha nicht für jeden Test Zeit?

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) 

Warum für zwei Testfälle ich die Testzeit (65/53 ms), aber nicht für die anderen beiden Fällen? Gibt es eine bestimmte Option? Ich habe nur gefunden --slow aber nichts mehr.

Anzahl: wenn die Tests sind langsam, ich mal für alle Testfälle erhalten:

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) 

es scheint, wenn die Testfälle sehr schnell sind, dann habe ich keine Zeit bekommen ..?

Antwort

20

Das Verhalten, auf das Sie achten, ist das Standardverhalten von Mocha. Sofern nicht anders angegeben, erhalten Sie beim Ausführen von Mocha an der Befehlszeile den spec Reporter (dessen Klassenname Spec ist).

Alle Reporter mit Mocha gebündelt sind auf dem Base Reporter basiert, die diesen Code hat:

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++; 
    }); 

Sie können dort sehen, dass Tests, die langsam (--slow Option auf Befehl als mehr als die Anzahl der Millisekunden dauern Zeile, Standard 75ms) sind als slow markiert. Diejenigen, die mehr als die Hälfte dieser Zeit benötigen, sind als medium markiert und diejenigen, die weniger als diese nehmen, sind mit fast markiert.

Der Code für die Spec Reporter tut dies:

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); 
    } 
    }); 

Dieser Code läuft nach dem in der Base Reporter (Base initialisiert vor Spec). Wenn also der Handler im vorherigen Code-Snippet ausgeführt wird, wurde der Test als slow, medium oder fast markiert. Wie Sie sehen können, wird Mocha die Zeit nur dann melden, wenn der Test nicht schnell ist.

Sie können die Anzahl der Fälle erweitern, in denen Mocha die Uhrzeit meldet, indem Sie --slow 0 an die Befehlszeile übergeben. (--slow -1 schaltet die Zeitreporting vollständig aus.) Sie können jedoch theoretisch Tests erhalten, die 0ms dauern, und diese Tests werden als schnell angesehen und haben keine Zeit gemeldet.

Wenn Sie die Zeit Berichterstattung für jeden Test erzwingen wollen und einen Reporter verwenden, der wie der spec Reporter funktioniert, sehe ich keinen anderen Weg, es als Ihre eigenen benutzerdefinierten Reporter zu tun.

+1

Vielen Dank! Umfangreich und klar. – Rainer

Verwandte Themen