การทดสอบ javascript ด้วย Mocha - ฉันจะใช้ console.log เพื่อดีบักการทดสอบได้อย่างไร


105

ฉันใช้โปรแกรมทดสอบจาวาสคริปต์ "Mocha"

ฉันมีการทดสอบที่ล้มเหลวดังนั้นฉันจะแก้ไขข้อบกพร่องโดยใช้console.log.

แต่เมื่อดำเนินการทดสอบจะไม่มีผลลัพธ์ (เฉพาะผลการทดสอบจากมอคค่า) ดูเหมือนว่ามอคค่าจะจับและปราบปรามconsole.logผลผลิตของฉัน!

ฉันจะให้มอคค่าแสดงผลลัพธ์ได้อย่างไร (สำหรับการทดสอบที่ล้มเหลว)?

แก้ไข:

ขออภัยอย่างสูง! - console.logทำงานระหว่างการทดสอบ! ฉันต้องคาดหวังว่ามันจะระงับเอาต์พุตและฉันไม่ได้ตรวจสอบรหัสของตัวเองอย่างถูกต้อง ขอบคุณสำหรับการตอบกลับ ดังนั้น ... ที่ถูกกล่าวว่า ... บางทีอาจเป็นการดีที่จะระงับผลลัพธ์สำหรับการทดสอบที่ผ่าน? อืม ...

ในบันทึกที่เกี่ยวข้อง: ฉันต้องการใช้console.logเนื่องจากฉันมีปัญหามากมายในการพยายามรับตัวดีบักเกอร์ Eclipse เพื่อเชื่อมต่อกับ node.js

ฉันเป็นคนเดียวที่พบว่ามีเล่ห์เหลี่ยมนี้หรือไม่? พวกคุณแก้จุดบกพร่อง node.js ได้อย่างไร? ด้วยดีบักเกอร์หรือด้วยconsole.logคำสั่ง?


ข้อตกลงที่ดี! :) ตอนนี้ฉันยังคง 'debugging' node อยู่มากผ่านการทดสอบ moca ฉันเห็นเวลาในอนาคตอันใกล้ที่ฉันอาจต้องการประเมินตัวเลือกบางอย่างที่นี่: stackoverflow.com/questions/1911015/…
Zach Bonham

ฉันขอแนะนำว่าคุณอย่าใช้ Eclipse สำหรับ Node.js มันไม่ใช่สภาพแวดล้อมที่ดีที่สุดที่จะใช้ IMO WebStorm ของ JetBrains เป็น Node.js IDE ที่ยอดเยี่ยมแม้ว่าจะต้องเสียเงิน หากคุณกำลังมองหาฟรีฉันชอบ Visual Studio Code ใหม่ซึ่งมีการสนับสนุนในตัวที่ยอดเยี่ยมสำหรับการดีบักโหนดและสิ่งอื่น ๆ ที่ทำให้การพัฒนาโหนดดี
dsw88

@ dsw88 - ประสบการณ์ของฉันกับ WebStorm คือมันช้าลงเมื่อโครงสร้างไฟล์ของเราเริ่มมีขนาดใหญ่และลึก ทำให้ฉันนึกถึงสมัยก่อนด้วยแอป Java
kirk.burleson

2
นอกเหนือจากสิ่งที่ @ dsw88 เขียน: ใช้ VS Code: ใส่ "debugger;" คำสั่งบางแห่งในรหัสของคุณ เริ่มการทดสอบของคุณด้วยตัวเลือก --inspect-brk และใช้การดำเนินการดีบัก VS Code "NodeJs attach" ดีบักเกอร์เริ่มต้นที่บรรทัดแรกในสคริปต์ mocha และคุณจะต้องกด Resume หนึ่งครั้ง "ดีบักเกอร์;" ในครั้งต่อไป ถึงคำสั่งแล้วคุณพร้อมที่จะไป
FabianTe

คำตอบ:


49

คุณใช้ตัวเลือก Mocha อะไร

อาจจะเป็นเรื่องที่เกี่ยวข้องกับการใช้นักข่าว (-R) หรือ ui (-ui)?

console.log(msg);

ทำงานได้ดีในระหว่างการทดสอบของฉันแม้ว่าบางครั้งจะผสมกันเล็กน้อย อาจเกิดจากลักษณะการทดสอบที่ไม่ตรงกัน

นี่คือตัวเลือก (mocha.opts) ที่ฉันใช้:

--require should
-R spec
--ui bdd

อืม.. แค่ทดสอบโดยไม่ต้องใช้มอคค่าออปชั่นใด ๆconsole.logก็ยังใช้ได้


4
log () เยอะจริงที่ไหน?
PositiveGuy

32

หากคุณกำลังทดสอบโค้ดอะซิงโครนัสคุณต้องแน่ใจว่าได้วางdone()ในการเรียกกลับของรหัสอะซิงโครนัสนั้น ฉันประสบปัญหานั้นเมื่อทดสอบคำขอ http ไปยัง REST API


20

นอกจากนี้คุณอาจconsole.logคาดหวังว่าจะล้มเหลวและไม่ถูกตรวจพบดังนั้นรายการบันทึกของคุณจะไม่ถูกดำเนินการ


2
ใช่นั่นเป็นปัญหาของฉันขอบคุณที่แนะนำสิ่งนี้ ฉันย้ายบันทึกคอนโซลไปที่ก่อนที่จะเกิดความล้มเหลวคาดว่าจะแสดงในขณะนี้
redfox05

-1

ใช้debug lib

import debug from 'debug'
const log = debug('server');

ใช้มัน:

log('holi')

จากนั้นเรียกใช้:

DEBUG=server npm test

แค่นี้แหละ!

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