Karma กับกรอบการทดสอบ Jasmine, Mocha, QUnit [ปิด]


258

คำถามไม่กี่:

  • กรรมและกรอบการทดสอบ X (จัสมินมอคค่า QUnit) เกี่ยวข้องกันอย่างไร
  • อะไรคือกรอบการทำงานที่เทียบเท่าในโลกของ Java? ฉันถือว่าจัสมินมอคค่า QUnit เท่ากับ jUnit / TestNG กรรมเป็นอย่างไรบ้าง
  • ฉันสามารถรันกรอบการทดสอบ X (เช่นจัสมิน) โดยไม่มีกรรมได้หรือไม่?
  • กรรมสำหรับการทดสอบหน่วยหรือการรวม / การทดสอบ e2e หรือไม่ การอ้างอิงนี้แสดงสำหรับการทดสอบหน่วยอย่างไรก็ตามสิ่งนี้กล่าวคือการทดสอบ e2e

เราใช้มอคค่าโดยไม่มีกรรม แต่นักพัฒนาจำนวนมากใช้กรอบการทดสอบหลายแบบ
the_red_baron

คำตอบ:


419

Karma เป็นนักวิ่งทดสอบเบราว์เซอร์

แนวคิดคือเบราว์เซอร์ไม่มีแนวคิดในการโหลดไฟล์ทดสอบเรียกใช้และผลการรายงาน กรรมทำอะไร (โดยประมาณ):

  • การเริ่มต้นเว็บเซิร์ฟเวอร์ขนาดเล็กเพื่อให้บริการไฟล์จาวาสคริปต์ "ฝั่งไคลเอ็นต์" ที่จะทดสอบ (1)
  • ยังให้บริการไฟล์จาวาสคริปต์ "ฝั่งไคลเอ็นต์" ด้วยการทดสอบ (หรือสเป็คตามที่มักเรียกว่า) (2)
  • ให้บริการหน้าเว็บที่กำหนดเองที่จะเรียกใช้รหัสจาวาสคริปต์สำหรับการทดสอบ (3)
  • เริ่มเบราว์เซอร์เพื่อโหลดหน้านี้ (4)
  • รายงานผลการทดสอบไปยังเซิร์ฟเวอร์ (5)
  • กรรมนั้นสามารถรายงานผลลัพธ์ไปยังไฟล์ข้อความคอนโซลสิ่งอื่นใดที่เซิร์ฟเวอร์ CI ของคุณชอบ ฯลฯ ...

ดูแต่ละส่วน:

(1) ไฟล์เหล่านั้นจะเป็นไฟล์ js ที่แท้จริงของคุณ คุณจะบอกกรรมวิธีการโหลด หากคุณใช้ requirejs จะมีปลั๊กอินกรรมและจำเป็นต้องมีการกำหนดค่าบางอย่าง

(2) การทดสอบเหล่านั้นสามารถเขียนในกรอบการทดสอบ Javascript ที่หลากหลาย (จัสมิน, QUnit, มอคค่า) นี่คือรหัส JS ที่ทำงานในเบราว์เซอร์

(3) หน้าเว็บที่กำหนดเองจะแตกต่างกันเล็กน้อยสำหรับแต่ละเฟรมเวิร์กการทดสอบ นี่คือเหตุผลที่กรรมมีปลั๊กอินสำหรับกรอบงานที่แตกต่างกัน

(4) Karma สามารถเปิดหน้าในเบราว์เซอร์จำนวนมาก (FF, Chrome หรือเบราว์เซอร์ที่ไม่มีหัวเช่น PhantomJs)

(5) การรายงานไปยังกรรมเป็นอีกครั้งขึ้นอยู่กับกรอบและจัดการกับปลั๊กอินกรรม

ดังนั้นเพื่อตอบคำถามของคุณ:

  • ใน Java คนส่วนใหญ่ใช้ JUnit ซึ่งเป็นทั้งเฟรมเวิร์กในการเขียนการทดสอบและรัน แต่ไม่ได้มีปัญหาในการสร้างความแตกต่างของสภาพแวดล้อมที่การทดสอบรัน กรรมจะเป็นชิ้นส่วนที่ขาดหายไประหว่าง JUnit Suite และ JUnit TestRunner
  • ใช่คุณสามารถทำทุกอย่างที่กรรมทำ "ด้วยมือ" - เลือกหนึ่งเฟรมเวิร์ก (จัสมิน, qunit, มอคค่า) และทำตามคำแนะนำ ข้อดีของกรรมคือมันให้ทางออกนอกกรอบหากคุณอยู่ในการตั้งค่ามาตรฐาน
  • Karma สามารถใช้สำหรับการทดสอบทั้งหน่วย (ด้วยจัสมิน / qunit / อะไรก็ตาม) และการทดสอบการรวม (ซึ่งจะใช้ API อื่นเช่น webdriver เพื่อขับเบราว์เซอร์)

59
นี่สมควรได้รับการโพสต์บล็อกหรืออะไร
Willa

Karma สามารถเปิดหน้าในเบราว์เซอร์จำนวนมาก (FF, Chrome หรือเบราว์เซอร์ที่ไม่มีส่วนหัวเช่น PhantomJs)? ดอกมะลิถูกต้องหรือไม่ เราสามารถทดสอบกับหลาย ๆ เฟรมและเลือกเซ็ตอัพนั้นใน conf js
Wang'l Pakhrin

1
@ Wang'lPakhrin แน่นอนคุณสามารถใช้ดอกมะลิกับ (m) เบราว์เซอร์ใดก็ได้ สิ่งที่ฉันหมายถึงก็คือในทางเทคนิคกรรมสามารถเปิดตัว (m) เบราว์เซอร์ใดก็ได้ที่คุณต้องการทดสอบ ในช่วงเวลาของการเขียนจัสมินไม่รับผิดชอบต่อการเริ่มต้นเบราว์เซอร์จริง ๆ (ฉันยังไม่คิดว่ามันจะเป็นเช่นนั้น) หวังว่ามันจะชี้แจงสิ่งต่าง ๆ !
phtrivier

thejsguy.com/2015/01/12/jasmine-vs-mocha-chai-and-sinon.html "จัสมินกับมอคค่าชัยและ Sinon"
escapedcat

1
@Willa ผมได้ทำคลิป youtube ที่อยู่บนพื้นฐานของคำตอบนี้youtube.com/watch?v=bJc078szrZA :)
bersling

70

วิธีที่สั้นกว่าหนึ่งที่จะเข้าใจความแตกต่าง:

ผู้ที่ทดสอบด้วยจัสมินธรรมดา / มอคค่ามักเรียกใช้รหัสทั้งหมดด้วยเครื่องเสมือนของ Node

การเพิ่ม Karma ให้กับมิกซ์ (ด้านบนของเฟรมเวิร์กที่คุณเลือก) จะรันชุดทดสอบของคุณด้วยเอ็นจินของเบราว์เซอร์อื่น

ด้วยการทำเช่นนี้คุณจะได้รับความพิเศษเล็กน้อยจากสภาพแวดล้อมของเบราว์เซอร์ มันจะง่ายกว่าในการทดสอบรหัสที่เกี่ยวข้องกับ DOM แต่คุณจะมอบทรัพยากรเพิ่มเติมที่กำหนดโดยเอ็นจิ้นโหนด (เช่นการเข้าถึงระบบไฟล์ / เชลล์)


34

วิทยานิพนธ์ของคนที่ออกแบบ Karma นั้นให้ข้อมูลอย่างมากในการอธิบายวิธีแก้ปัญหาที่มีอยู่และเปรียบเทียบพวกเขาและแน่นอนว่าจะอธิบายถึงกรรมเอง

https://github.com/karma-runner/karma/blob/master/thesis.pdf

สรุป: กรรมเป็นนักวิ่งทดสอบ มันสามารถใช้งานได้โดย QUnit, จัสมิน, มอคค่า, ... กรรมมีข้อดีสำหรับนักวิ่งทดสอบอื่น ๆ เพื่อพัฒนาวงจรการพัฒนา TDD / BDD ของคุณ มันเป็น "เฝ้าดู" ไฟล์ดังนั้นเมื่อคุณบันทึกการเปลี่ยนแปลง Karma จะเรียกใช้การทดสอบและรายงานกลับทันทีไม่มีการสลับบริบทไปยังเว็บเบราว์เซอร์เพื่อเรียกใช้การทดสอบ

ในระยะสั้นคำถามอาจจะเป็นกรรมและจัสมินหรือมอคค่าหรือ QUnit?


2
คุณสรุปได้เล็กน้อยจากลิงค์ นั่นช่วยปรับปรุงคำตอบของคุณ
winner_joiner

1
กรรมสามารถทำการทดสอบ Jest ได้หรือไม่?
SuperUberDuper

คุณสามารถดูในจัสมินด้วยหรือไม่ ฉันคิดอย่างนั้น แต่ฉันจำไม่ได้
Wang'l Pakhrin

@ Wang'l Pakhrin ฉันไม่รู้ว่า Jasmine มีฟังก์ชั่นนาฬิกาฉันแค่ใช้ nodemon "nodemon --exec jasmine" และทุกครั้งที่คุณบันทึกไฟล์มันจะทำการทดสอบ
snowfrogdev

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