รหัสครอบคลุมสำหรับ Jest


131

มีวิธีการครอบคลุมโค้ดในกรอบการทดสอบ Javascript Jest ที่สร้างขึ้นจากจัสมินหรือไม่?

กรอบงานภายในไม่พิมพ์ความครอบคลุมของรหัสที่ได้รับ ฉันได้พยายามยังมีการใช้อิสตันบูล , ผ้าห่มและJSCoverแต่ไม่มีผู้ใดของการทำงานของพวกเขา


ฉันไม่ค่อยตลก แต่คุณเคยเห็นconfig.collectCoverageหรือไม่?
Ciro Costa

คำตอบ:


124

เมื่อใช้Jest 21.2.1ฉันสามารถดูการครอบคลุมของโค้ดที่บรรทัดคำสั่งและสร้างไดเร็กทอรีความครอบคลุมโดยส่ง--coverageไปยังสคริปต์ Jest ด้านล่างนี้เป็นตัวอย่างบางส่วน:

ฉันมักจะติดตั้ง Jest ในเครื่องซึ่งในกรณีนี้คำสั่งอาจมีลักษณะดังนี้:

npx jest --coverage

ฉันคิดว่า (แม้ว่าจะยังไม่ได้รับการยืนยัน) สิ่งนี้จะใช้ได้เช่นกันหากฉันติดตั้ง Jest ทั่วโลก:

jest --coverage

เอกสารที่กระจัดกระจายอยู่ที่นี่

เมื่อฉันเข้าไปในไดเร็กทอรี coverage / lcov-reportฉันพบไฟล์index.htmlที่สามารถโหลดลงในเบราว์เซอร์ได้ รวมถึงข้อมูลที่พิมพ์ในบรรทัดคำสั่งรวมทั้งข้อมูลเพิ่มเติมและเอาต์พุตกราฟิกบางส่วน


7
ห้ามใช้โมดูลส่วนกลาง เพื่อให้แน่ใจว่าความสอดคล้องของเวอร์ชันและการมีอยู่ของแพ็กเกจให้ใช้ไฟล์ปฏิบัติการnode_modulesผ่านทาง./node_modules/.bin/jest --coverage. ตราบใดที่มีการตั้งชื่อแพ็กเกจใน package.json คุณสามารถรับประกันการดำเนินการด้วย jest เวอร์ชันที่คุณคาดหวังได้
taystack

จะรับความคุ้มครองเฉพาะสำหรับไฟล์ที่เปลี่ยนแปลงได้อย่างไร
Shanika Ediriweera

มีวิธีง่ายๆในการไม่ผ่านการทดสอบหากความครอบคลุมต่ำกว่าขีด จำกัด ที่กำหนดหรือไม่? SO-question ที่ตรงกัน: stackoverflow.com/questions/60512167/…
Stefan


88

UPDATE: 7/20/2018 - เพิ่มลิงค์และชื่อที่อัพเดทสำหรับ coverageReporters

UPDATE: 14/08/2017 - คำตอบนี้ล้าสมัยโดยสิ้นเชิง แค่ดูเอกสาร Jest ตอนนี้ พวกเขามีการสนับสนุนอย่างเป็นทางการและเอกสารเกี่ยวกับวิธีการดำเนินการนี้

@hankhsiao มี repo แยกที่อิสตันบูลกำลังทำงานร่วมกับ Jest เพิ่มสิ่งนี้ลงในการพึ่งพานักพัฒนาของคุณ

 "devDependencies": {
     "jest-cli": "git://github.com/hankhsiao/jest.git"
 }

ตรวจสอบให้แน่ใจว่าได้เปิดใช้งานความครอบคลุมในรายการ package.json jest ของคุณแล้วและคุณยังสามารถระบุรูปแบบที่คุณต้องการได้อีกด้วย (html ค่อนข้างแย่)

 "jest": {
     "collectCoverage": true,
     "coverageReporters": ["json", "html"],
 }

ดูเอกสาร JestสำหรับcoverageReporters (ค่าเริ่มต้นคือ ["json", "lcov", "text"])

หรือเพิ่ม--coverageเมื่อคุณเรียกร้องตลก


1
ตัวเลือก coverageFormats ถูกลบ - ดูเหมือนว่า json และ html จะถูกสร้างขึ้นทุกครั้ง

1
ฉันใช้ตัวเลือก --coverrage แต่ไม่มีอะไรแตกต่างไปจากเดิมอย่างแน่นอน
gbbr

3
มัน (ตอนนี้) เรียกว่าและเริ่มต้นคือcoverageReporters ["json", "lcov", "text"]ดูfacebook.github.io/jest/docs/…
Karsten S.

ไม่ทำงานพบตัวเลือกที่ไม่รู้จัก "coverageFormats" ที่มีค่า ["json", "html"]
srghma

40

ม.ค. 2019: Jest เวอร์ชัน 23.6.2

สำหรับใครก็ตามที่กำลังมองหาคำถามนี้เมื่อเร็ว ๆ นี้โดยเฉพาะอย่างยิ่งหากทดสอบโดยใช้npmหรือyarnโดยตรง

ขณะนี้คุณไม่จำเป็นต้องเปลี่ยนตัวเลือกการกำหนดค่า

ตามเว็บไซต์ทางการของ jestคุณสามารถทำสิ่งต่อไปนี้เพื่อสร้างรายงานความครอบคลุม:

1- สำหรับ npm:

คุณต้องใส่--ก่อนที่จะผ่านการ--coverageโต้แย้งของความตลกขบขัน

npm test -- --coverage

หากคุณพยายามเรียกใช้--coverageโดยตรงโดย--ไม่ได้ผล

2- สำหรับเส้นด้าย:

คุณสามารถส่งผ่าน--coverageข้อโต้แย้งของความตลกขบขันได้โดยตรง

yarn test --coverage

1
จะรับความคุ้มครองเฉพาะสำหรับไฟล์ที่เปลี่ยนแปลงได้อย่างไร
Shanika Ediriweera

เปลี่ยนไปตั้งแต่เมื่อไหร่? คุณอาจต้องการใช้การ--watchตั้งค่านี้
koehn

1
package.jsonคำตอบนี้ทำให้มากสมมติฐานเกี่ยวกับสถานะของคนที่
airtonix

6

เอาล่ะไม่ต้องสนใจคำตอบก่อนหน้าของฉันเพราะมีคนบอกฉันว่ามันไม่สามารถแก้ปัญหาได้

คำตอบใหม่:

1) ตรวจสอบ jest ล่าสุด (v 0.22): https://github.com/facebook/jest

2) ทีมงานของ Facebook กำหนดให้อิสตันบูลเป็นส่วนหนึ่งของรายงานความครอบคลุมและคุณสามารถใช้ได้โดยตรง

3) หลังจากดำเนินการ jest คุณจะได้รับรายงานความครอบคลุมบนคอนโซลและภายใต้โฟลเดอร์รูทที่กำหนดโดย jest คุณจะพบรายงานความครอบคลุมในรูปแบบ json และ html

4) FYI หากคุณติดตั้งจาก npm คุณอาจไม่ได้รับเวอร์ชันล่าสุด ดังนั้นลองใช้ github ก่อนและตรวจสอบให้แน่ใจว่าครอบคลุมสิ่งที่คุณต้องการ


คำตอบเก่า:

มีปัญหาเดียวกันเช่นกัน คำตอบสั้น ๆ คือ: IstanbulและJestไม่ได้ทำงานร่วมกัน

ตรวจสอบหน้าต่อไปนี้สำหรับรายละเอียดเพิ่มเติม:

https://github.com/facebook/jest/issues/101

jest ใช้ contextify ซึ่งรันสคริปต์ JS ในบริบท V8 ในโค้ดเนทีฟดังนั้นจึงข้ามความต้องการของ istanbul และ vm.runInThisContext hooks ทั้งหมด ดังนั้นฝาปิดอิสตันบูลจะไม่ทำงานเนื่องจากไม่ได้ใช้ฟังก์ชัน node.js ที่เชื่อมต่อได้มาตรฐานและไฟล์เครื่องมือวัดล่วงหน้าจะไม่ช่วยเนื่องจากการทดสอบทุกครั้งทำงานในแซนด์บ็อกซ์ของตัวเองและไม่มีโกลบอลที่จะซ่อนวัตถุครอบคลุม

@Ciro Costa: ใช้งานconfig.collectCoverageไม่ได้เนื่องจากเป็นฟังก์ชัน 'TODO' โปรดตรวจสอบซอร์สโค้ด


คำถามคือวิธีรับ Code coverage สำหรับ Jest อิสตันบูลและ Jest ไม่ได้ทำงานร่วมกันอาจเป็นเรื่องจริง แต่นั่นไม่ได้ตอบคำถาม
David Raab

0

หากคุณประสบปัญหากับ --coverage ไม่ทำงานอาจเป็นเพราะมีการเปิดใช้ coverageReporters โดยไม่มีการเพิ่ม "text" หรือ "text-summary" จากเอกสาร: "หมายเหตุ: การตั้งค่าตัวเลือกนี้จะเขียนทับค่าเริ่มต้นเพิ่ม" text "หรือ" text-summary "เพื่อดูสรุปความครอบคลุมในเอาต์พุตคอนโซล" แหล่ง


0

กำหนดค่าไฟล์ package.json ของคุณ

"test": "jest --coverage",

ใส่คำอธิบายภาพที่นี่

ตอนนี้เรียกใช้:

yarn test

การทดสอบทั้งหมดจะเริ่มทำงานและคุณจะได้รับรายงาน ใส่คำอธิบายภาพที่นี่


-1

ฉันมีปัญหาเดียวกันและฉันได้รับการแก้ไขดังต่อไปนี้

  1. ติดตั้งเส้นด้าย npm install --save-dev yarn
  2. ติดตั้ง jest-cli npm install --save-dev jest-cli
  3. เพิ่มสิ่งนี้ลงใน package.json "jest-coverage": "yarn run jest -- --coverage"

หลังจากที่คุณเขียนการทดสอบให้รันคำสั่ง npm ให้รัน jest-coverage สิ่งนี้จะสร้างโฟลเดอร์ความครอบคลุมในไดเรกทอรีราก /coverage/icov-report/index.html มีมุมมอง html ของการครอบคลุมโค้ด

ขอให้สนุกกับการเขียนโค้ด!


8
ไม่จำเป็นต้องติดตั้งเส้นด้าย Yarn เป็นเพียงผู้จัดการแพ็คเกจที่แตกต่างกันกับ NPM
Black

-10

ลองทะลึ่ง เพิ่งเคยใช้ค่ะ และฉันเขียนบล็อกเกี่ยวกับวิธีการรวมใน Visual Studio

นี่คือวิธีที่ฉันใช้รหัสครอบคลุมกับ Chutzpah: http://francorobles.wordpress.com/2014/09/14/code-coverage-with-chutzpah/


Chutzpath สร้างขึ้นที่ด้านบนของ Blanket และฉันระบุไว้ข้างต้นว่า Jest ใช้ไม่ได้กับมัน
Alex Palcuie

น่าสนใจเพราะฉันเพิ่งทำงาน francorobles.wordpress.com/2014/09/14/…
francorobles

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