ฉันจะอ่านรายงานความครอบคลุมของอิสตันบูลได้อย่างไร


131

ฉันใช้จัสมินในการทดสอบหน่วยของฉันมาโดยตลอด แต่เมื่อเร็ว ๆ นี้ฉันเริ่มใช้อิสตันบูลเพื่อให้รายงานการครอบคลุมรหัสแก่ฉัน ฉันหมายความว่าฉันเข้าใจสาระสำคัญของสิ่งที่พวกเขาพยายามจะบอกฉัน แต่ฉันไม่รู้จริงๆว่าเปอร์เซ็นต์เหล่านี้เป็นตัวแทนของอะไร (Stmts, Branches, Funcs, Lines) จนถึงตอนนี้ Googling ฉันไม่พบคำอธิบาย / แหล่งข้อมูลที่ชัดเจน

คำถาม : เหมือนที่ฉันบอกว่าฉันเข้าใจสาระสำคัญของมัน แต่มีคนโพสต์คำอธิบายที่เหมาะสมหรือลิงก์ไปยังคำอธิบายที่เหมาะสมได้หรือไม่?

คำถามระดับอุดมศึกษา : มีวิธีใดบ้างในการระบุว่าส่วนใดของโค้ดของคุณไม่ครอบคลุม? จนถึงตอนนี้โดยไม่ต้องบ่นรายงานนี้โดยทั่วไปฉันคาดเดา

-------------------|-----------|-----------|-----------|-----------|
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
การรันอิสตันบูลควรสร้างไฟล์ HTML สำหรับรายงานด้วย (ควรอยู่ในโฟลเดอร์ความครอบคลุม) HTML นี้ควรให้ข้อมูลเจาะลึกเมื่อคุณคลิกที่ไฟล์ / โฟลเดอร์
Yaron Schwimmer

ขอบคุณ @yarons นั่นช่วยเจาะลึกความครอบคลุมและระบุสิ่งที่ไม่ครอบคลุมโดยเฉพาะ ฉันยังไม่เข้าใจในเชิงลึกว่าเปอร์เซ็นต์หมายถึงอะไร = /
Scott Sword

คำตอบ:


217

มีเกณฑ์ความคุ้มครองหลายประการหลัก ๆ ได้แก่ :

  • ความครอบคลุมของฟังก์ชันแต่ละฟังก์ชัน (หรือรูทีนย่อย) ในโปรแกรมถูกเรียกใช้หรือไม่?
  • การครอบคลุมคำชี้แจงมีการดำเนินการแต่ละคำสั่งในโปรแกรมหรือไม่?
  • การครอบคลุมสาขาแต่ละสาขา (เรียกอีกอย่างว่า DD-path) ของโครงสร้างการควบคุมแต่ละแบบ (เช่นใน if และ case statement) ถูกดำเนินการหรือไม่? ตัวอย่างเช่นหากระบุคำสั่ง if มีการดำเนินการทั้งกิ่งจริงและเท็จหรือไม่? อีกวิธีหนึ่งในการพูดสิ่งนี้คือมีการดำเนินการทุกขอบในโปรแกรมหรือไม่?
  • Line coverageมีการเรียกใช้งานแต่ละบรรทัดในไฟล์ต้นทางหรือไม่

สำหรับแต่ละกรณีเปอร์เซ็นต์จะแสดงรหัสที่ดำเนินการเทียบกับโค้ดที่ไม่ได้ดำเนินการซึ่งจะเท่ากับเศษส่วนแต่ละส่วนในรูปแบบเปอร์เซ็นต์ (เช่นกิ่ง 50% 1/2)

ในรายงานไฟล์:

  • 'E' ย่อมาจาก 'else path not taken' ซึ่งหมายความว่าสำหรับคำสั่ง if / else ที่ทำเครื่องหมายไว้เส้นทาง 'if' ได้รับการทดสอบ แต่ไม่ใช่ 'else'
  • 'I' ย่อมาจาก 'if path not taken' ซึ่งเป็นกรณีตรงกันข้าม: ยังไม่ได้ทดสอบ 'if'
  • xNในคอลัมน์ด้านซ้ายคือจำนวนครั้งที่สายได้รับการดำเนินการ
  • บรรทัดที่ไม่ดำเนินการหรือชิ้นส่วนของโค้ดจะถูกเน้นด้วยสีแดง

สิ่งนี้ได้รับการตรวจสอบแล้วสำหรับ Istanbul v0.4.0 ฉันไม่แน่ใจว่าสิ่งนี้ยังใช้ได้กับเวอร์ชันต่อ ๆ ไปหรือไม่ แต่เนื่องจากไลบรารีนั้นเป็นไปตามหลักการทางทฤษฎีที่มั่นคงพฤติกรรมจึงไม่ควรเปลี่ยนแปลงมากเกินไปสำหรับเวอร์ชันที่ใหม่กว่า

นอกจากนี้ยังมีรหัสสี -

สีชมพู : ไม่ครอบคลุมงบ

สีส้ม : ไม่ครอบคลุมฟังก์ชัน

สีเหลือง : ไม่ครอบคลุมกิ่งก้าน

เอกสารอิสตันบูลฉบับเต็มที่นี่:

https://istanbul.js.org

สำหรับทฤษฎีเชิงลึกเพิ่มเติมเกี่ยวกับการครอบคลุมรหัส:

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

หวังว่าจะช่วยได้!


8

การรันอิสตันบูลควรสร้างไฟล์ HTML สำหรับรายงานด้วย (ควรอยู่ในโฟลเดอร์ความครอบคลุม) HTML นี้ควรให้ข้อมูลเจาะลึกเมื่อคุณคลิกที่ไฟล์ / โฟลเดอร์

เปอร์เซ็นต์ของฟังก์ชันที่ครอบคลุมคำนวณโดยจำนวนฟังก์ชันที่ถูกเรียกระหว่างการทดสอบหารด้วยจำนวนฟังก์ชันทั้งหมด เหมือนกันสำหรับบรรทัดและข้อความ (ซึ่งโดยปกติจะอยู่ใกล้กันเว้นแต่คุณจะมีข้อความที่ยาวมาก) สาขาหมายถึงจุดตัดสินใจเหมือนif-elseบล็อค ตัวอย่างเช่นสมมติว่ารหัสของคุณมีเพียงif-elseคำสั่งเดียวและการทดสอบของคุณผ่านเฉพาะifส่วน แต่ไม่ใช่elseส่วนนั้นเปอร์เซ็นต์สาขาของคุณควรเป็น 50%

หวังว่าจะทำให้สิ่งต่างๆชัดเจนขึ้น


ฉันวิ่งอิสตันบูลโดยระบุ"test" : "nyc mocha"ในpackage.json. โฟลเดอร์ความครอบคลุมของฉันว่างเปล่า คิด?
TheCrazyProgrammer

1
ฉันเพิ่มผู้รายงาน html ตอนนี้ใช้งานได้แล้ว "test" : "nyc --reporter=html mocha"
TheCrazyProgrammer

ตัวอย่างเช่นหากคุณมี if-branch ขนาดใหญ่และสาขาอื่นเล็ก ๆ และมีการรันเฉพาะ if-branch การครอบคลุมของไลน์จะดูดีมาก แต่การครอบคลุมสาขาจะยังคงเป็นเพียง 50% เท่านั้น นอกจากนี้คุณสามารถมีหลายคำสั่งต่อบรรทัดหากคำสั่งถูกคั่นด้วยอัฒภาคหรือถ้าบรรทัดนั้นมีนิยามฟังก์ชัน (ซึ่งมีคำสั่งของตัวเอง) คุณสามารถมีได้หลายบรรทัดต่อหนึ่งคำสั่งหากคำสั่งมีตัวแบ่งบรรทัดก่อนอัฒภาคสุดท้าย
Hew Wolff

0

การเพิ่มคำตอบก่อนหน้านี้

% งบคำนวณโดยการหาเปอร์เซ็นต์ของจำนวนคำสั่งที่ครอบคลุมโดยการทดสอบของคุณเช่น 12/18 * 100 = 66.67% ซึ่งหมายความว่าการทดสอบของคุณครอบคลุมเพียง 66.67%

นอกจากนี้ยังคำนวณ% สาขาในลักษณะเดียวกัน เหมือนกันสำหรับ% Functions และ% lines ของคุณ

ในไดเร็กทอรีรูทของโปรเจ็กต์ของคุณมีโฟลเดอร์ครอบคลุมที่มีเอาต์พุต HTML ของการทดสอบของคุณ คลิกที่มันและดูในเบราว์เซอร์ คุณควรเห็นอะไรแบบนี้

รูปภาพแสดงผลลัพธ์ของผลการทดสอบของคุณ

ฉันหวังว่านี่จะช่วยให้คุณเข้าใจได้ดีขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.