ฉันใช้มอคค่าสำหรับทดสอบแอปพลิเคชัน NodeJS ของฉัน ฉันไม่สามารถหาวิธีใช้คุณสมบัติครอบคลุมรหัสได้ ฉันลอง googling แล้ว แต่ไม่พบบทแนะนำที่เหมาะสม กรุณาช่วย.
ฉันใช้มอคค่าสำหรับทดสอบแอปพลิเคชัน NodeJS ของฉัน ฉันไม่สามารถหาวิธีใช้คุณสมบัติครอบคลุมรหัสได้ ฉันลอง googling แล้ว แต่ไม่พบบทแนะนำที่เหมาะสม กรุณาช่วย.
คำตอบ:
คุณต้องมีไลบรารีเพิ่มเติมสำหรับการครอบคลุมโค้ดและคุณจะถูกปลิวไปโดยวิธีที่ทรงพลังและง่าย อิสตันบูลเป็น ลองทำสิ่งต่อไปนี้หลังจากที่คุณได้รับการทดสอบมอคค่าของคุณเพื่อผ่าน:
npm install nyc
ตอนนี้เพียงแค่วางคำสั่ง nyc ไว้หน้าคำสั่งทดสอบที่มีอยู่ของคุณตัวอย่างเช่น
{
"scripts": {
"test": "nyc mocha"
}
}
istanbul.cmd cover C:\Users\{UserName}\AppData\Roaming\npm\node_modules\mocha\bin\_mocha
$(npm bin)
เป็นทางลัดแบบบัญญัติถึง./node_modules/.bin/
และistanbul/lib/cli.js
เป็นนามแฝงistanbul
ในโฟลเดอร์ช่องเก็บ ดังนั้นนี่เป็นคำสั่งที่สั้นกว่า:$(npm bin)/istanbul cover $(npm bin)/_mocha -- --ui bdd -R spec -t 5000
istanbul cover node_modules/mocha/bin/_mocha -- -R spec
ตอนนี้ ( 2020 ) วิธีที่ต้องการใช้อิสตันบูลคือผ่านทาง"ส่วนต่อประสานบรรทัดคำสั่งที่ทันสมัย" ของ nyc nyc
ก่อนติดตั้งในโครงการของคุณด้วย
npm i nyc --save-dev
จากนั้นหากคุณมีโปรเจ็กต์ตาม npm เพียงแค่เปลี่ยนสคริปต์ทดสอบภายในscripts
วัตถุของไฟล์package.jsonของคุณเพื่อดำเนินการครอบคลุมโค้ดของการทดสอบมอคค่าของคุณ:
{
"scripts": {
"test": "nyc --reporter=text mocha"
}
}
ตอนนี้ทำการทดสอบของคุณ
npm test
และคุณจะเห็นตารางแบบนี้ในคอนโซลของคุณหลังจากเอาท์พุทการทดสอบของคุณ:
เพียงแค่ใช้
nyc --reporter=html
text
แทน ตอนนี้มันจะสร้างรายงานภายใน./coverage/index.html
ตอนนี้มันจะผลิตภายในรายงาน
อิสตันบูลรองรับรูปแบบรายงานที่หลากหลาย เพียงดูที่ห้องสมุดรายงานเพื่อค้นหาสิ่งที่มีประโยชน์ที่สุดสำหรับคุณ เพียงเพิ่ม--reporter=REPORTER_NAME
ตัวเลือกสำหรับแต่ละรูปแบบที่คุณต้องการ ตัวอย่างเช่นด้วย
nyc --reporter=html --reporter=text
คุณจะมีทั้งคอนโซลและรายงาน html
เพียงเพิ่มสคริปต์อื่นในของคุณpackage.json
และปล่อยให้test
สคริปต์มีเพียงนักทดสอบของคุณ (เช่นมอคค่า):
{
"scripts": {
"test": "mocha",
"test-with-coverage": "nyc --reporter=text mocha"
}
}
ตอนนี้เรียกใช้สคริปต์ที่กำหนดเองนี้
npm run test-with-coverage
เพื่อเรียกใช้การทดสอบที่มีรหัสครอบคลุม
ล้มเหลวหากความครอบคลุมรหัสทั้งหมดต่ำกว่า 90%:
nyc --check-coverage --lines 90
ล้มเหลวหากรหัสครอบคลุมของไฟล์อย่างน้อยหนึ่งไฟล์ต่ำกว่า 90%:
nyc --check-coverage --lines 90 --per-file
--reporter=html
เปิดใช้งานแล้ว แต่ไฟล์ html นั้นว่างเสมอไม่มีสิ่งใดที่แสดงให้เห็นถึงบล็อกที่ไม่มีการเปิดหรือ% ที่ปกคลุม ฯลฯ เพียงส่วนหัวของตาราง
Blanket.js ก็ทำงานได้อย่างสมบูรณ์แบบเช่นกัน
npm install --save-dev blanket
นำหน้าการทดสอบ / tests.js ของคุณ
require('blanket')({
pattern: function (filename) {
return !/node_modules/.test(filename);
}
});
วิ่ง mocha -R html-cov > coverage.html
istanbul cover node_modules/mocha/bin/_mocha
และถ้าคุณกำลังเรียกใช้รุ่นที่ติดตั้งภายในของมอคค่าลอง