คำตอบ:
ปรับปรุง:
มอคค่าดีที่สุดในความคิดของฉัน
ประสบการณ์กับกรอบเหล่านี้คืออะไร?
ฉันเล่นกับexpressoซึ่งเป็นกรอบการทดสอบที่ยอดเยี่ยมซึ่งมีการครอบคลุมการทดสอบด้วย สร้างขึ้นโดย TJ Holowaychuk ซึ่งเป็นผู้สร้างExpress.js (เฟรมเวิร์กการพัฒนาเว็บ JavaScript ฝั่งเซิร์ฟเวอร์ที่เร็ว (และเล็ก) ที่สร้างขึ้นบน Node.js และ Connect) เมื่อเร็ว ๆ นี้ฉันเห็นว่าเขามีไลบรารีเจ๋ง ๆ ชื่อshould.jsซึ่งสามารถใช้ร่วมกับ Expresso เพื่อประสบการณ์การทดสอบที่ดียิ่งขึ้น
เห็นได้ชัดว่าความสามารถในการทำงานในเบราว์เซอร์จะเป็นโบนัสใหญ่
ฉันไม่เชื่อว่ามันสามารถทำงานในเบราว์เซอร์ได้ แต่ฉันก็ไม่เข้าใจเหมือนกันว่าทำไมคุณถึงต้องการเรียกใช้งานภายในเบราว์เซอร์?
แต่ฉันสนใจ Node.js เป็นหลัก สิ่งที่มีความเอียงแบบอะซิงโครนัสอย่างหนักจะดีมาก
อ้างจาก expresso:
อาร์กิวเมนต์ที่ส่งไปยังการเรียกกลับแต่ละครั้งคือ beforeExit ซึ่งโดยทั่วไปจะใช้เพื่อยืนยันว่ามีการเรียกใช้การโทรกลับ
คุณสามารถใช้ beforeExit เพื่อทดสอบฟังก์ชันอะซิงโครนัส
เคล็ดลับ:ติดตามTJ HolowaychukบนGitHubเพราะเขาสร้างโค้ดโอเพนซอร์สที่ดีมาก
ฉันใช้VowsJSซึ่งใช้งานง่าย async BDD framework (Behavior Driven Development) และทำงานให้ลุล่วง
จากสิ่งที่ฉันเห็นเมื่อเร็ว ๆ นี้เป็นสิ่งที่หลายคนเลือกที่จะทดสอบโมดูล NPM ของพวกเขาดังนั้นฉันเชื่อว่าจนถึงตอนนี้มันเป็นโมดูลที่ดีที่สุดที่จะใช้
กรอบการทดสอบยอดนิยมบางส่วนที่สามารถใช้กับ NodeJS ได้แก่ :
คุณยังสามารถดูรายการกรอบการทดสอบ JavaScript ได้ที่นี่
libs อีกสองสามตัวที่สามารถช่วยให้คุณเขียนโค้ดได้ดีขึ้น ได้แก่ :
นอกจากนี้ยังมีBamboo CI ServerโดยAtlassian ซึ่งสร้างและทดสอบโดยอัตโนมัติ เป็นแพ็คเกจสำหรับApache / Tomcat (ซึ่ง sux เพราะใช้ Java และทำให้หนักมาก)ยังไม่ฟรี แต่มีใบอนุญาตเริ่มต้นซึ่งมีราคา 10 เหรียญดังนั้นฉันเชื่อว่าราคาไม่แพง เป็นเซิร์ฟเวอร์ CI ที่โดดเด่นที่สุดที่ฉันพบและรองรับการทดสอบหน่วยทั้งหมดที่รองรับxUnitซึ่งหมายความว่าคุณสามารถเรียกใช้บิลด์ / การทดสอบสำหรับภาษาใดก็ได้ด้วย Bamboo
อีกทางเลือกหนึ่งสำหรับ CI กับ NodeJS คือTravisซึ่งผู้คนจำนวนมากใช้สำหรับโครงการโอเพ่นซอร์สของพวกเขาดังที่กล่าวว่าบริการผสานรวมแบบต่อเนื่องที่โฮสต์สำหรับชุมชนโอเพ่นซอร์ส
นอกจากนี้ยังมีการอภิปรายกลุ่ม Google ที่มีบูรณาการอย่างต่อเนื่องสำหรับโหนด JS โครงการหัวข้อ
จากความคิดเห็นของผู้ถามข้างต้นฉันได้ลองใช้คำปฏิญาณและมันช่วยแก้ปัญหามากมายที่ฉันประสบกับการทดสอบ async ของฉัน ความสามารถในการผสมการทดสอบแบบอนุกรมและแบบขนานนั้นยอดเยี่ยมมาก
ตรวจสอบให้แน่ใจว่าคุณได้อ่านเอกสารคำแนะนำอย่างละเอียด แต่เมื่อคุณเข้าใจมันแล้วเอกสารนี้จะมีความยืดหยุ่นมีประสิทธิภาพและให้ผลลัพธ์ที่ดีและสะอาด
อัปเดต: ฉันขอแนะนำให้ผู้คนตรวจสอบสิ่งที่ควรทำเพื่อยืนยัน ช่วยให้มีการยืนยันที่ยืดหยุ่นมากอ่านได้ง่ายและเข้ากันได้กับทั้ง Expresso และ Vows และอาจเป็นกรอบการทดสอบอื่น ๆ ด้วยเช่นกัน
(ฉันโพสต์สิ่งนี้เป็นคำตอบแยกต่างหากในกรณีที่ผู้คนไม่สังเกตเห็นความคิดเห็นเกี่ยวกับคำตอบของ Alfred)
อัปเดต 1/7/2558: สำหรับสิ่งที่คุ้มค่าฉันได้เปลี่ยนจาก Vows เป็น Mocha และจาก Should เป็น Chai ขณะนี้ Mocha ได้รับการสนับสนุนที่ดีขึ้นมากสำหรับการทดสอบแบบอะซิงโครนัสโดยใช้สัญญาและ Chai ช่วยให้มีตัวเลือกการยืนยันที่ยืดหยุ่นหลายอย่างรวมถึงexpect
API สำหรับผู้ที่ไม่ต้องการแก้ไขต้นแบบวัตถุ
should
tacks ที่พักที่ไม่นับการตั้งชื่อshould
ให้กับObject
ต้นแบบความหมายทั้งหมดของค่า / วัตถุที่คุณกำลังซื้อขายด้วยรูปลักษณ์เล็กน้อยที่แตกต่างกันในช่วงเวลาการทดสอบและการที่เวลาในการผลิต แม้ว่าสิ่งนี้อาจ 'ใช้ได้ผล' ในกรณีส่วนใหญ่ แต่โดยหลักการแล้วเป็นความคิดที่ไม่ดีในการปรับเปลี่ยนต้นแบบในตัว ให้ทำเฉพาะในระหว่างการทดสอบเท่านั้นที่รู้สึกผิด ทั้งหมดนี้ทำเพียงอย่างเดียวเพื่อให้มีไวยากรณ์ที่ดี
should
โดยไม่ต้องขยายObject.prototype
(เรียกrequire('should').noConflict()
และใช้ should.js เป็นทางเลือกที่คาดหวัง
ฉันเริ่มใช้จัสมินสำหรับการทดสอบ JavaScript โดยเฉพาะเนื่องจากมีขนาดเล็กและทำงานได้ทั้งในเบราว์เซอร์และโหนด นอกจากนี้ยังมี API การรายงานและการจับคู่ที่มั่นคงมากดังนั้นจึงง่ายต่อการผสานรวมกับเครื่องมืออื่น ๆ ในอนาคต การมีเฟรมเวิร์กการเยาะเย้ย buildin ก็มีประโยชน์เช่นกันเนื่องจากมักเป็นหนึ่งในสิ่งแรกที่ฉันจะเพิ่มเมื่อฉันใช้ qunit สำหรับ TDD ในเบราว์เซอร์
หากคุณต้องการกรอบ BDD จริงแล้วอาจจะพิจารณาYadda มันรวมเข้ากับมอคค่าจัสมิน nodeunit qunit ซอมบี้และ casperjs เพื่อรองรับไฟล์ฟีเจอร์เช่น
Scenario: provides the version of all services
given service x is running
and service y is running
when I request the service versions
then service x should be version 0.0.1
and service y should be version 0.0.2
ฉันใช้nodeunitและความสามารถในการทำงานกับฟังก์ชัน async นั้นตรงไปตรงมาพอสมควร
มีคำแนะนำที่ดีที่ควรจะได้รับคุณพร้อมที่จะไปกับ nodeunit เป็นในบล็อกของเขา
[ หมายเหตุ: API มีการเปลี่ยนแปลงตั้งแต่บล็อกโพสต์ - setUp(callback)
และtearDown(callback)
ทั้งสองใช้การเรียกกลับเป็นอาร์กิวเมนต์ซึ่งคุณต้องเรียกใช้เมื่อการตั้งค่า / การฉีกขาดเสร็จสมบูรณ์ ]