กรอบการทดสอบที่ดีที่สุดที่จะใช้กับ Node.js คืออะไร [ปิด]


130

ฉันได้ดูรายการที่ค่อนข้างยาวของกรอบการทดสอบที่https://github.com/ry/node/wiki/modules#testing ประสบการณ์กับกรอบเหล่านี้คืออะไร?

เห็นได้ชัดว่าความสามารถในการทำงานในเบราว์เซอร์จะเป็นโบนัสก้อนโต แต่ฉันสนใจ Node.js เป็นหลัก สิ่งที่มีความเอียงแบบอะซิงโครนัสอย่างหนักจะดีมาก

คำตอบ:


70

ปรับปรุง:

มอคค่าดีที่สุดในความคิดของฉัน


ประสบการณ์กับกรอบเหล่านี้คืออะไร?

ฉันเล่นกับexpressoซึ่งเป็นกรอบการทดสอบที่ยอดเยี่ยมซึ่งมีการครอบคลุมการทดสอบด้วย สร้างขึ้นโดย TJ Holowaychuk ซึ่งเป็นผู้สร้างExpress.js (เฟรมเวิร์กการพัฒนาเว็บ JavaScript ฝั่งเซิร์ฟเวอร์ที่เร็ว (และเล็ก) ที่สร้างขึ้นบน Node.js และ Connect) เมื่อเร็ว ๆ นี้ฉันเห็นว่าเขามีไลบรารีเจ๋ง ๆ ชื่อshould.jsซึ่งสามารถใช้ร่วมกับ Expresso เพื่อประสบการณ์การทดสอบที่ดียิ่งขึ้น

เห็นได้ชัดว่าความสามารถในการทำงานในเบราว์เซอร์จะเป็นโบนัสใหญ่

ฉันไม่เชื่อว่ามันสามารถทำงานในเบราว์เซอร์ได้ แต่ฉันก็ไม่เข้าใจเหมือนกันว่าทำไมคุณถึงต้องการเรียกใช้งานภายในเบราว์เซอร์?

แต่ฉันสนใจ Node.js เป็นหลัก สิ่งที่มีความเอียงแบบอะซิงโครนัสอย่างหนักจะดีมาก

อ้างจาก expresso:

อาร์กิวเมนต์ที่ส่งไปยังการเรียกกลับแต่ละครั้งคือ beforeExit ซึ่งโดยทั่วไปจะใช้เพื่อยืนยันว่ามีการเรียกใช้การโทรกลับ

คุณสามารถใช้ beforeExit เพื่อทดสอบฟังก์ชันอะซิงโครนัส


เคล็ดลับ:ติดตามTJ HolowaychukบนGitHubเพราะเขาสร้างโค้ดโอเพนซอร์สที่ดีมาก


ขอบคุณสำหรับการตอบกลับฉันลองใช้ expresso แต่พบว่าการรองรับ async นั้นไม่ได้ใช้งานง่ายนัก (สำหรับฉันแล้วล่ะ)
doffm

3
ตอนนี้ฉันกำลังลองทำตามคำปฏิญาณ ( vowsjs.org ) ซึ่งเข้าใจง่ายกว่าสำหรับฉัน
doffm

คำปฏิญาณยังดูเหมือนกรอบการทดสอบที่ดี ฉันชอบคุณสมบัติการครอบคลุมการทดสอบของ expresso นอกจากนี้ฉันสงสัยในสิ่งที่คุณไม่เข้าใจ?
Alfred

4
คุณบอกว่าตอนนี้คุณชอบมอคค่า แต่ทำไมล่ะ?
Jonathan Arkell

แค่ลองดู. มอคค่ามีทุกอย่าง :). แม้แต่การรองรับเบราว์เซอร์การครอบคลุมโค้ด คุณชื่อมันมอคค่าได้!
Alfred

40

ฉันใช้VowsJSซึ่งใช้งานง่าย async BDD framework (Behavior Driven Development) และทำงานให้ลุล่วง

จากสิ่งที่ฉันเห็นเมื่อเร็ว ๆ นี้เป็นสิ่งที่หลายคนเลือกที่จะทดสอบโมดูล NPM ของพวกเขาดังนั้นฉันเชื่อว่าจนถึงตอนนี้มันเป็นโมดูลที่ดีที่สุดที่จะใช้

กรอบการทดสอบยอดนิยมบางส่วนที่สามารถใช้กับ NodeJS ได้แก่ :

คุณยังสามารถดูรายการกรอบการทดสอบ JavaScript ได้ที่นี่

libs อีกสองสามตัวที่สามารถช่วยให้คุณเขียนโค้ดได้ดีขึ้น ได้แก่ :

  • ReadyJS ดูไฟล์ js ของคุณและทดสอบด้วยJSHint
  • เซิร์ฟเวอร์รวมต่อเนื่องขนาดเล็กที่เป็นรูปธรรม
  • Jezebel ทดสอบจัสมินอย่างต่อเนื่อง
  • Nosy ไม่ค่อยมี แต่มีแผนงานที่ดีดังนั้นฉันจึงจับตาดูมัน

นอกจากนี้ยังมีBamboo CI ServerโดยAtlassian ซึ่งสร้างและทดสอบโดยอัตโนมัติ เป็นแพ็คเกจสำหรับApache / Tomcat (ซึ่ง sux เพราะใช้ Java และทำให้หนักมาก)ยังไม่ฟรี แต่มีใบอนุญาตเริ่มต้นซึ่งมีราคา 10 เหรียญดังนั้นฉันเชื่อว่าราคาไม่แพง เป็นเซิร์ฟเวอร์ CI ที่โดดเด่นที่สุดที่ฉันพบและรองรับการทดสอบหน่วยทั้งหมดที่รองรับxUnitซึ่งหมายความว่าคุณสามารถเรียกใช้บิลด์ / การทดสอบสำหรับภาษาใดก็ได้ด้วย Bamboo

อีกทางเลือกหนึ่งสำหรับ CI กับ NodeJS คือTravisซึ่งผู้คนจำนวนมากใช้สำหรับโครงการโอเพ่นซอร์สของพวกเขาดังที่กล่าวว่าบริการผสานรวมแบบต่อเนื่องที่โฮสต์สำหรับชุมชนโอเพ่นซอร์ส

นอกจากนี้ยังมีการอภิปรายกลุ่ม Google ที่มีบูรณาการอย่างต่อเนื่องสำหรับโหนด JS โครงการหัวข้อ


6
หมายเหตุสำหรับผู้ที่คิดจะใช้ Vows: ยังไม่ได้รับการอัปเดตตั้งแต่ปี 2012
Code Commander

พวกเขาทำการเปลี่ยนแปลงบางอย่างหลังจากนั้น เผยแพร่ครั้งสุดท้าย: ก.ย. 2558
Andre Figueiredo

มีเกตเวย์ที่ไม่ดีบนเว็บไซต์ Vows oficial ในปี 2020 อาจถึงตาย?
ลินคอล์น

ว้าวเพื่อนมันเป็นเวลาหลายปีแล้วที่ฉันพบเกี่ยวกับ VowJS ตอนนี้คือ: istavros.github.io/vowjsแต่น่าเสียดายที่ฉันไม่สามารถแนะนำให้คุณใช้ในปี 2020 ได้มันล้าสมัยแล้วและฉันก็ขอเป็นอย่างยิ่ง แนะนำให้คุณตรวจสอบ Mocha ( mochajs.org ), Jasmin ( jasmine.github.io ) และ Jest ( jestjs.io ) แทน
panosru

14

จากความคิดเห็นของผู้ถามข้างต้นฉันได้ลองใช้คำปฏิญาณและมันช่วยแก้ปัญหามากมายที่ฉันประสบกับการทดสอบ async ของฉัน ความสามารถในการผสมการทดสอบแบบอนุกรมและแบบขนานนั้นยอดเยี่ยมมาก

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

อัปเดต: ฉันขอแนะนำให้ผู้คนตรวจสอบสิ่งที่ควรทำเพื่อยืนยัน ช่วยให้มีการยืนยันที่ยืดหยุ่นมากอ่านได้ง่ายและเข้ากันได้กับทั้ง Expresso และ Vows และอาจเป็นกรอบการทดสอบอื่น ๆ ด้วยเช่นกัน

(ฉันโพสต์สิ่งนี้เป็นคำตอบแยกต่างหากในกรณีที่ผู้คนไม่สังเกตเห็นความคิดเห็นเกี่ยวกับคำตอบของ Alfred)

อัปเดต 1/7/2558: สำหรับสิ่งที่คุ้มค่าฉันได้เปลี่ยนจาก Vows เป็น Mocha และจาก Should เป็น Chai ขณะนี้ Mocha ได้รับการสนับสนุนที่ดีขึ้นมากสำหรับการทดสอบแบบอะซิงโครนัสโดยใช้สัญญาและ Chai ช่วยให้มีตัวเลือกการยืนยันที่ยืดหยุ่นหลายอย่างรวมถึงexpectAPI สำหรับผู้ที่ไม่ต้องการแก้ไขต้นแบบวัตถุ


1
shouldtacks ที่พักที่ไม่นับการตั้งชื่อshouldให้กับObjectต้นแบบความหมายทั้งหมดของค่า / วัตถุที่คุณกำลังซื้อขายด้วยรูปลักษณ์เล็กน้อยที่แตกต่างกันในช่วงเวลาการทดสอบและการที่เวลาในการผลิต แม้ว่าสิ่งนี้อาจ 'ใช้ได้ผล' ในกรณีส่วนใหญ่ แต่โดยหลักการแล้วเป็นความคิดที่ไม่ดีในการปรับเปลี่ยนต้นแบบในตัว ให้ทำเฉพาะในระหว่างการทดสอบเท่านั้นที่รู้สึกผิด ทั้งหมดนี้ทำเพียงอย่างเดียวเพื่อให้มีไวยากรณ์ที่ดี
ไหล

@flow ตั้งแต่ v2 มันใช้งานง่ายshouldโดยไม่ต้องขยายObject.prototype(เรียกrequire('should').noConflict()และใช้ should.js เป็นทางเลือกที่คาดหวัง
den bardadym

6

ฉันเริ่มใช้จัสมินสำหรับการทดสอบ JavaScript โดยเฉพาะเนื่องจากมีขนาดเล็กและทำงานได้ทั้งในเบราว์เซอร์และโหนด นอกจากนี้ยังมี API การรายงานและการจับคู่ที่มั่นคงมากดังนั้นจึงง่ายต่อการผสานรวมกับเครื่องมืออื่น ๆ ในอนาคต การมีเฟรมเวิร์กการเยาะเย้ย buildin ก็มีประโยชน์เช่นกันเนื่องจากมักเป็นหนึ่งในสิ่งแรกที่ฉันจะเพิ่มเมื่อฉันใช้ qunit สำหรับ TDD ในเบราว์เซอร์


2

หากคุณต้องการกรอบ 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

2

ฉันใช้nodeunitและความสามารถในการทำงานกับฟังก์ชัน async นั้นตรงไปตรงมาพอสมควร

มีคำแนะนำที่ดีที่ควรจะได้รับคุณพร้อมที่จะไปกับ nodeunit เป็นในบล็อกของเขา

[ หมายเหตุ: API มีการเปลี่ยนแปลงตั้งแต่บล็อกโพสต์ - setUp(callback)และtearDown(callback)ทั้งสองใช้การเรียกกลับเป็นอาร์กิวเมนต์ซึ่งคุณต้องเรียกใช้เมื่อการตั้งค่า / การฉีกขาดเสร็จสมบูรณ์ ]


เมื่อพิจารณาจากสิ่งนี้และหลังจากพยายามทดสอบฟังก์ชั่น mongoose.js สองสามครั้งใน expresso การตั้งค่าของ nodeunit ที่ไม่เรียกใช้การทดสอบทั้งหมดในแบบคู่ขนานและการอนุญาตให้ทำการทดสอบ setUp และ tearDown ดูมีประโยชน์
asparagino
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.