2015-08-12 17 views
9

Używanie mocha do robienia testów jednostki node.js dostaję np. ten wynik:Dlaczego firma Mocha nie raportuje czasu na każdy 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) 

Dlaczego w dwóch przypadkach testowych otrzymuję czas testu (65/53 ms), ale nie w dwóch pozostałych przypadkach? Czy istnieje pewna opcja? Znalazłem tylko --slow, ale nic więcej.

Dodaj: czy testy są powolne, mam czas dla wszystkich przypadków testowych:

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) 

wydaje się, jeżeli przypadki testowe są bardzo szybko, a potem mam czasu ..?

Odpowiedz

20

Zachowanie, które zauważyłeś, jest domyślnym zachowaniem Mokki. O ile nie zaznaczono inaczej, po uruchomieniu Mocha z wiersza poleceń otrzymasz reporter spec (którego nazwa klasy to Spec).

Wszystkie reporterów wiązane z Mocha są oparte na Base reportera, który ma ten kod:

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

Można tam zobaczyć, że testy, które mają więcej niż liczba milisekund uznanych za wolno (--slow opcję w komendzie linia, domyślnie 75 ms) oznaczono jako slow. Te, które zajmują więcej niż połowę tego czasu, są oznaczone jako medium, a te, które zajmują mniej niż ta, są oznaczone jako fast.

Kod dla Spec reportera ma to:

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

Kod ten przebiega po jedno w Base reporterem (Base inicjuje przed Spec). Tak więc do czasu uruchomienia programu obsługi w poprzednim fragmencie kodu test został oznaczony jako slow, lub fast. Jak widać, Mocha zgłasza czas tylko wtedy, gdy test nie jest szybki.

Możesz zwiększyć liczbę przypadków, w których Mokka zgłasza czas, przekazując --slow 0 do wiersza poleceń. (--slow -1 całkowicie wyłącza raportowanie czasu). Jednak teoretycznie można uzyskać testy, które trwają 0 ms, a testy te zostaną uznane za szybkie i nie będą zgłaszane w żadnym momencie.

Jeśli chcesz wymusić raportowanie czasu dla każdego testu i użyć reportera, który działa jak reporter spec, nie widzę sposobu, aby zrobić to inaczej niż przy użyciu własnego niestandardowego reportera.

+1

Dziękuję bardzo! Rozległe i jasne. – Rainer

Powiązane problemy