2015-08-12 26 views
9

node.js birim testlerini yapmak için mocha'yı kullanıyorum örn. Bu çıkışı:Mocha neden her test için zaman bildirmiyor?

iki test durumları için diğer iki durum için değil test süresini (65/53 ms) olsun, ama neden
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) 

? Belli bir seçenek var mı? Ben sadece --slow buldum ama daha fazla bir şey.

Ekleme: testler yavaş, ben tüm test durumları için kere olsun: test durumları çok hızlı olduğunda

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) 

o, o zaman hiçbir zaman olsun görünüyor ..?

cevap

20

Fark ettiğin davranış, Mocha'nın varsayılan davranışıdır. Aksi belirtilmedikçe, Mocha'yı komut satırında çalıştırdığınızda, spec muhabirini (sınıf adı Spec olan) alırsınız. Mocha ile birlikte

Tüm muhabirler bu kodu vardır Base muhabir dayanmaktadır:

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

Orada görebilirsiniz emrinde yavaş (--slow seçeneği kabul milisaniye sayısından daha fazla sürebilir testler satır, varsayılan 75ms) slow olarak işaretlenir. Bu sürenin yarısından fazlasına sahip olanlar medium olarak işaretlenir ve bundan daha azını alanlar fast olarak işaretlenir.

Spec muhabir için kod yapar:

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

Bu kod Base muhabir içinde ardına (BaseSpec önce başlatır) çalıştırır. Bu nedenle, önceki kod parçacığında işleyici çalıştırıldığında, sınama slow, medium veya fast olarak işaretlenmiştir. Gördüğünüz gibi, Mocha sadece test hızlı değilse zamanı bildirecektir.

Mocha'nın komut satırına --slow 0'u geçerek bildireceği zaman sayısını genişletebilirsiniz. (--slow -1 tamamen raporlamayı tamamıyla kapatır.) Ancak, teoride hala, 0ms alan testler alabilirsiniz ve bu testler hızlı olarak kabul edilecek ve herhangi bir zaman bildirilmeyecektir.

Her sınama için zaman bildirimini zorlamak ve spec muhabiri gibi çalışan bir muhabir kullanmak istiyorsanız, bunu kendi özel muhabirinizi kullanmanın dışında bir yol görmüyorum.

+1

Çok teşekkürler! Geniş ve açık. – Rainer

İlgili konular