İstanbul Kapsamı Raporunu nasıl okurum?


131

Jasmine'i birim testleri için her zaman kullandım, ancak son zamanlarda bana kod kapsamı raporları vermek için İstanbul'u kullanmaya başladım. Demek istediğim , bana anlatmaya çalıştıkları şeyin özünü anlıyorum, ancak bu yüzdelerin her birinin neyi temsil ettiğini gerçekten bilmiyorum (Stmts, Branches, Funcs, Lines). Şimdiye kadar Google'da sağlam bir açıklama / kaynak bulamadım.

Soru : Dediğim gibi işin özünü anlıyorum, ancak birisi ya uygun bir açıklama ya da uygun bir açıklama için bir bağlantı gönderebilir mi?

Üçüncül Soru : Kodunuzun hangi belirli bölümlerinin kapsanmadığını belirlemenin bir yolu var mı? Şimdiye kadar bu rapora gerçekten dokunmadan, temelde tahmin ediyorum.

-------------------|-----------|-----------|-----------|-----------|
File               |   % Stmts |% Branches |   % Funcs |   % Lines |
-------------------|-----------|-----------|-----------|-----------|
   controllers/    |      88.1 |     77.78 |     78.57 |      88.1 |
      dashboard.js |      88.1 |     77.78 |     78.57 |      88.1 |
-------------------|-----------|-----------|-----------|-----------|
All files          |      88.1 |     77.78 |     78.57 |      88.1 |
-------------------|-----------|-----------|-----------|-----------|

3
Running istanbul ayrıca rapor için bir HTML dosyası oluşturmalıdır (kapsam klasöründe olmalıdır). Bu HTML, dosyalara / klasörlere tıkladığınızda ayrıntılı bilgi vermelidir
Yaron Schwimmer

Teşekkürler @yarons. Bu kesinlikle kapsamı derinlemesine incelemeye ve özellikle neyin kapsanmadığını belirlemeye yardımcı olur. Yüzdelerin ne anlama geldiğini hala derinlemesine anlamıyorum = /.
Scott Kılıç

Yanıtlar:


217

Bir dizi kapsam kriteri vardır, bunların başlıcaları şunlardır:

  • Fonksiyon kapsamı Programdaki her bir fonksiyon (veya alt program) çağrıldı mı?
  • Bildirim kapsamı Programdaki her ifade yürütüldü mü?
  • Branşman kapsamı Her kontrol yapısının (if ve case ifadelerinde olduğu gibi) her şubesi (DD yolu olarak da adlandırılır) yürütüldü mü? Örneğin, bir if ifadesi verildiğinde, hem doğru hem de yanlış dallar çalıştırıldı mı? Bunu söylemenin başka bir yolu da, programdaki her kenar çalıştırıldı mı?
  • Satır kapsamı kaynak dosyadaki her yürütülebilir satır çalıştırıldı mı?

Her bir durum için, yüzde temsil kod yürütülür karşı değil çalıştırılır kodu (% 50 dalları, 1/2 gibi) her bir yüzde biçiminde fraksiyonu eşittir.

Dosya raporunda:

  • 'E' "else alınmamış yol" anlamına gelir; bu, işaretli if / else ifadesi için, "eğer" yolu test edilmiştir, ancak "else" değildir.
  • 'I' "yol alınmadıysa" anlamına gelir ve bunun tersi bir durumdur: "eğer" test edilmemiştir.
  • xNSol sütunda hattı uygulanmış olduğu zaman miktarıdır.
  • Yürütülmeyen satırlar veya kod parçaları kırmızıyla vurgulanacaktır.

Bu, İstanbul v0.4.0 için doğrulandı, bunun sonraki sürümler için hala geçerli olup olmadığından emin değilim, ancak bu kitaplık sağlam teorik ilkelere dayandığından, davranış yeni sürümler için çok fazla değişmemelidir.

Ayrıca bazı renk kodları da sağlar -

Pembe : kapsanmayan ifadeler.

Turuncu : kapsanmayan işlevler.

Sarı : kapatılmamış dallar.

Tam İstanbul belgeleri burada:

https://istanbul.js.org

Kod kapsamı hakkında daha derinlemesine teori için:

https://en.wikipedia.org/wiki/Code_coverage

Umarım yardımcı olur!


8

Running istanbul ayrıca rapor için bir HTML dosyası oluşturmalıdır (kapsam klasöründe olmalıdır). Bu HTML, dosyalara / klasörlere tıkladığınızda ayrıntılı bilgi vermelidir.

Kapsanan işlevlerin yüzdesi, testler sırasında çağrılan işlevlerin sayısının toplam işlev sayısına bölünmesiyle hesaplanır. Aynı şey satırlar ve ifadeler için de geçerlidir (çok uzun ifadeleriniz yoksa genellikle birbirine yakın olacaktır). Dallar, if-elsebloklar gibi karar noktaları anlamına gelir . Örneğin, kodunuzun yalnızca bir if-elseifade içerdiğini ve testlerinizin yalnızca ifparçadan geçtiğini, ancak parçadan geçmediğini else, o zaman dal yüzdenizin% 50 olması gerektiğini varsayalım.

Umarım bu işleri daha açık hale getirir.


Ben belirterek istanbul koştu "test" : "nyc mocha"içinde package.json. Kapsam klasörüm boş. Düşünceler?
TheCrazyProgrammer

1
Html muhabiri ekledim. Şu an çalışıyor. "test" : "nyc --reporter=html mocha"
TheCrazyProgrammer

Örnek olarak: eğer büyük bir if-dalınız ve küçük bir başka-dalınız varsa ve sadece if-dalı çalıştırılmışsa, hat kapsamı harika görünecek, ancak şube kapsamı yine de sadece% 50 olacaktır. Ayrıca, ifadeler noktalı virgülle ayrılmışsa veya satır bir işlev tanımı içeriyorsa (kendi ifadelerini içeren), satır başına birden çok deyiminiz olabilir. İfadede son noktalı virgülden önce satır kesmeleri varsa, ifade başına birden çok satırınız olabilir.
Hew Wolff

0

Önceki cevaplara ekleniyor

% İfadeleri, testinizin kapsadığı ifade sayısının bir yüzdesi alınarak hesaplanır, örn. 12/18 * 100 =% 66.67. Bu, testinizin yalnızca% 66.67'yi kapsadığı anlamına gelir.

% Branşman da aynı şekilde hesaplanır. % Functions ve% satırlarınız için aynı.

Proje kök dizininizde, testinizin HTML çıktısını içeren bir kapsam klasörü vardır. Üzerine tıklayın ve tarayıcıda görüntüleyin. Bunun gibi bir şey görmelisin

Test sonuçlarınızın çıktısını gösteren resim

Umarım bu, daha iyi anlamanıza yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.