เครื่องมือทดสอบหน่วย JavaScript สำหรับ TDD


716

ฉันได้พิจารณาและพิจารณาการทดสอบหน่วย JavaScript และเครื่องมือทดสอบจำนวนมาก แต่ไม่สามารถหาตัวเลือกที่เหมาะสมเพื่อให้สอดคล้องกับ TDD ได้อย่างสมบูรณ์ ดังนั้นมีเครื่องมือทดสอบหน่วย JavaScript ที่สอดคล้องกับ TDD อย่างสมบูรณ์หรือไม่

คำตอบ:


1506

กรรมหรือไม้โปรแทรกเตอร์

Karma เป็นนักวิ่งทดสอบ JavaScript ที่สร้างขึ้นด้วย Node.js และมีความหมายสำหรับการทดสอบหน่วย

ไม้โปรแทรกเตอร์ใช้สำหรับการทดสอบแบบ end-to-end และใช้ Selenium Web Driver ในการทดสอบ

ทั้งสองถูกสร้างขึ้นโดยทีมเชิงมุม คุณสามารถใช้ห้องสมุดยืนยันใด ๆ ที่คุณต้องการด้วย

Screencast: Karma เริ่มต้นใช้งาน

ที่เกี่ยวข้อง :

ข้อดี :

  • ใช้ node.js ดังนั้นเข้ากันได้กับ Win / OS X / Linux
  • เรียกใช้การทดสอบจากเบราว์เซอร์หรือหัวขาดด้วย PhantomJS
  • ทำงานกับลูกค้าหลายคนในครั้งเดียว
  • ตัวเลือกในการเรียกใช้จับภาพและปิดเบราว์เซอร์โดยอัตโนมัติ
  • ตัวเลือกในการเรียกใช้เซิร์ฟเวอร์ / ไคลเอนต์บนคอมพิวเตอร์ที่กำลังพัฒนาหรือแยกกัน
  • เรียกใช้การทดสอบจากบรรทัดคำสั่ง (สามารถรวมเข้ากับ ant / maven)
  • เขียนการทดสอบสไตล์ xUnit หรือ BDD
  • รองรับกรอบการทดสอบ JavaScript หลายเฟรม
  • เรียกใช้การทดสอบอัตโนมัติเมื่อบันทึก
  • ผู้รับมอบฉันทะร้องขอข้ามโดเมน
  • เป็นไปได้ที่จะปรับแต่ง:
    • ขยายเพื่อห่อกรอบการทดสอบอื่น ๆ (จัสมินมอคค่า QUnit ในตัว)
    • การยืนยัน / การโต้แย้งของคุณเอง
    • ผู้สื่อข่าว
    • ตัวเรียกใช้เบราว์เซอร์
  • ปลั๊กอินสำหรับ WebStorm
  • สนับสนุนโดย Netbeans IDE

ข้อเสีย :

mocha.js

ฉันไม่มีเงื่อนไขโดยสิ้นเชิงที่จะแสดงความคิดเห็นเกี่ยวกับคุณสมบัติจุดแข็งและจุดอ่อนของ mocha.js แต่มีคนแนะนำฉันให้ฉันไว้วางใจในชุมชน JS

รายการคุณสมบัติตามที่รายงานโดยเว็บไซต์:

  • การสนับสนุนเบราว์เซอร์
  • การสนับสนุน async อย่างง่ายรวมถึงสัญญา
  • รายงานความครอบคลุมการทดสอบ
  • การสนับสนุนสตริง diff
  • javascript # API สำหรับการทดสอบที่กำลังรัน
  • สถานะทางออกที่เหมาะสมสำหรับการสนับสนุน CI ฯลฯ
  • ตรวจจับและปิดใช้งานการระบายสีโดยอัตโนมัติสำหรับผู้ที่ไม่ได้เป็น ttys
  • แมปข้อยกเว้นที่ไม่ได้ตรวจจับกับกรณีทดสอบที่ถูกต้อง
  • การสนับสนุนการหมดเวลาการทดสอบ async
  • หมดเวลาการทดสอบเฉพาะ
  • การสนับสนุนการแจ้งเตือนคำราม
  • รายงานระยะเวลาการทดสอบ
  • เน้นการทดสอบช้า
  • รองรับไฟล์เฝ้าดู
  • การตรวจจับการรั่วไหลของตัวแปรทั่วโลก
  • เรียกใช้การทดสอบทางเลือกที่ตรงกับ regexp
  • ออกโดยอัตโนมัติเพื่อป้องกัน "ห้อย" ด้วยลูปที่ใช้งานอยู่
  • เมตาสร้างชุดและทดสอบกรณีได้อย่างง่ายดาย
  • สนับสนุนไฟล์ mocha.opts
  • ชื่อชุดที่คลิกได้เพื่อกรองการดำเนินการทดสอบ
  • การสนับสนุนดีบักเกอร์โหนด
  • ตรวจพบการโทรหลายสายที่ต้องทำ ()
  • ใช้ไลบรารีการยืนยันใด ๆ ที่คุณต้องการ
  • การรายงานแบบขยายพร้อมกับนักข่าวมากกว่า 9 คน
  • ทดสอบส่วนต่อขยาย DSL หรือ "ส่วนต่อประสาน"
  • ก่อนหลังหลังก่อนแต่ละหลังแต่ละเบ็ด
  • การสนับสนุนเครื่องส่งสัญญาณโดยพลการ (กาแฟสคริปต์ ฯลฯ )
  • มัดข้อความ

yolpo

yolpo

ไม่มีอยู่อีกต่อไปเปลี่ยนเส้นทางไปยังsequential.jsแทน

Yolpo เป็นเครื่องมือในการเห็นภาพการทำงานของจาวาสคริปต์ นักพัฒนา Javascript API ได้รับการสนับสนุนให้เขียนกรณีการใช้เพื่อแสดงและบอก API ของพวกเขา กรณีการใช้งานดังกล่าวเป็นพื้นฐานของการทดสอบการถดถอย

AVA

โลโก้ AVA

นักวิ่งทดสอบแห่งอนาคตพร้อมการสนับสนุนในตัวสำหรับ ES2015 แม้ว่า JavaScript จะเป็นเธรดเดียว แต่ IO ใน Node.js สามารถเกิดขึ้นพร้อมกันได้เนื่องจากลักษณะของ async AVA ใช้ประโยชน์จากสิ่งนี้และดำเนินการทดสอบของคุณพร้อมกันซึ่งเป็นประโยชน์อย่างยิ่งสำหรับการทดสอบอย่างหนักของ IO นอกจากนี้ไฟล์ทดสอบจะทำงานแบบขนานเป็นกระบวนการแยกกันช่วยให้คุณมีประสิทธิภาพที่ดียิ่งขึ้นและมีสภาพแวดล้อมแบบแยกสำหรับแต่ละไฟล์ทดสอบ

  • น้อยที่สุดและรวดเร็ว
  • ไวยากรณ์การทดสอบอย่างง่าย
  • รันการทดสอบพร้อมกัน
  • บังคับใช้การเขียนการทดสอบปรมาณู
  • ไม่มีรูปทรงกลมโดยนัย
  • สภาพแวดล้อมที่แยกสำหรับแต่ละไฟล์ทดสอบ
  • เขียนการทดสอบของคุณใน ES2015
  • สัญญาการสนับสนุน
  • สนับสนุนฟังก์ชั่นเครื่องกำเนิด
  • รองรับฟังก์ชั่น Async
  • การสนับสนุนที่สังเกตได้
  • ยืนยันขั้นสูง
  • TAP o utput ที่เป็นตัวเลือก
  • ล้างร่องรอยสแต็ก

Buster.js

ตัวทดสอบ JavaScript ที่สร้างด้วย Node.js แบบแยกส่วนและยืดหยุ่น มันมาพร้อมกับห้องสมุดยืนยันของตัวเอง แต่คุณสามารถเพิ่มของคุณเองหากคุณต้องการ ห้องสมุดยืนยันหลุดพ้นเพื่อให้คุณยังสามารถใช้กับการทดสอบวิ่งอื่น ๆ แทนที่จะใช้assert(!...)หรือexpect(...).not...มันใช้refute(...)ซึ่งเป็น imho บิดดี

ชุดเครื่องมือทดสอบ JavaScript ของเบราว์เซอร์ มันทำการทดสอบเบราว์เซอร์ด้วยเบราว์เซอร์อัตโนมัติ (คิดว่า JsTestDriver), การทดสอบหน้า HTML แบบคงที่ของ QUnit, การทดสอบในเบราว์เซอร์ที่ไม่มีหัว (PhantomJS, jsdom, ... ) และอีกมากมาย ลองดูที่ภาพรวม !

ชุดเครื่องมือทดสอบ Node.js คุณจะได้รับไลบรารี่ของเคสทดสอบเดียวกัน, ไลบรารีการยืนยัน, และนี่ก็เป็นข้อดีสำหรับเบราว์เซอร์ลูกผสมและโค้ด Node.js เขียนกรณีทดสอบของคุณด้วย Buster.JS และเรียกใช้ทั้งใน Node.js และในเบราว์เซอร์จริง

Screencast: Buster.js เริ่มต้นใช้งาน (2:45)

ข้อดี :

  • ใช้ node.js ดังนั้นเข้ากันได้กับ Win / OS X / Linux
  • ทำการทดสอบจากเบราว์เซอร์หรือไม่ใช้หัวกับ PhantomJS
  • ทำงานกับลูกค้าหลายคนในครั้งเดียว
  • รองรับการทดสอบ NodeJS
  • ไม่จำเป็นต้องเรียกใช้เซิร์ฟเวอร์ / ไคลเอนต์บนคอมพิวเตอร์พัฒนา (ไม่จำเป็นสำหรับ IE)
  • เรียกใช้การทดสอบจากบรรทัดคำสั่ง (สามารถรวมเข้ากับ ant / maven)
  • เขียนการทดสอบสไตล์ xUnit หรือ BDD
  • รองรับกรอบการทดสอบ JavaScript หลายเฟรม
  • เลื่อนการทดสอบแทนการแสดงความคิดเห็น
  • SinonJS ในตัว
  • เรียกใช้การทดสอบอัตโนมัติเมื่อบันทึก
  • ผู้รับมอบฉันทะร้องขอข้ามโดเมน
  • เป็นไปได้ที่จะปรับแต่ง:
    • ขยายเพื่อห่อกรอบการทดสอบอื่น ๆ (JsTestDriver ในตัว)
    • การยืนยัน / การโต้แย้งของคุณเอง
    • ผู้รายงาน (xUnit XML, จุดดั้งเดิม, ข้อมูลจำเพาะ, แตะ, TeamCity และอื่น ๆ ในตัว)
    • ปรับแต่ง / แทนที่ HTML ที่ใช้ในการเรียกใช้การทดสอบเบราว์เซอร์
  • การรวม TextMate และ Emacs

ข้อเสีย :

  • สไตล์ในรุ่นเบต้าสามารถเป็นบั๊กกี้ได้
  • ไม่มีปลั๊กอินสำหรับ Eclipse / IntelliJ (ยัง)
  • ไม่จัดกลุ่มผลลัพธ์ตามระบบปฏิบัติการ / เบราว์เซอร์ / เวอร์ชันเช่น TestSwarm * อย่างไรก็ตามจะพิมพ์ชื่อเบราว์เซอร์และเวอร์ชันในผลการทดสอบ
  • ไม่มีประวัติผลการทดสอบก่อนหน้าเช่น TestSwarm *
  • ไม่สามารถใช้งานได้อย่างสมบูรณ์บน windows ตั้งแต่เดือนพฤษภาคม 2014

* TestSwarm เป็นเซิร์ฟเวอร์การรวมอย่างต่อเนื่องในขณะที่คุณต้องการเซิร์ฟเวอร์ CI แยกต่างหากสำหรับ Buster.js อย่างไรก็ตามมันส่งออกรายงาน xUnit XML ดังนั้นจึงควรรวมเข้ากับฮัดสัน , แบมบูหรือเซิร์ฟเวอร์ CI อื่น ๆ ได้ง่าย

TestSwarm

https://github.com/jquery/testswarm

TestSwarm อย่างเป็นทางการไม่ได้อยู่ภายใต้การพัฒนาที่ใช้งานอยู่ตามที่ระบุไว้ในหน้าเว็บของ GitHub พวกเขาแนะนำ Karma, Browserstack-runner หรือ Intern

ดอกมะลิ

ดอกมะลิ

นี่คือกรอบการทำงานที่ขับเคลื่อนด้วยพฤติกรรม (ตามที่ระบุไว้ในใบเสนอราคาด้านล่าง) ที่ผู้สนใจอาจคุ้นเคยกับ Ruby หรือ Ruby on Rails ไวยากรณ์นั้นใช้RSpecซึ่งใช้สำหรับการทดสอบในโครงการ Rails

รายละเอียดจัสมินสามารถเรียกใช้จากหน้า html (ในรูปแบบ qUnit) หรือจากนักวิ่งทดสอบ (เช่นกรรม)

จัสมินเป็นกรอบการพัฒนาที่ขับเคลื่อนด้วยพฤติกรรมสำหรับการทดสอบโค้ด JavaScript ของคุณ มันไม่ได้ขึ้นอยู่กับเฟรมเวิร์ก JavaScript อื่น ๆ มันไม่จำเป็นต้องมี DOM

หากคุณมีประสบการณ์เกี่ยวกับกรอบการทดสอบนี้โปรดช่วยด้วยข้อมูลเพิ่มเติม :)

โครงการบ้าน: http://jasmine.github.io/

QUnit

QUnit มุ่งเน้นไปที่การทดสอบ JavaScript ในเบราว์เซอร์ในขณะที่ให้ความสะดวกแก่นักพัฒนามากที่สุด ประกาศแจ้งจากเว็บไซต์:

QUnit เป็นชุดทดสอบหน่วย JavaScript ที่ใช้งานง่ายและมีประสิทธิภาพ มันถูกใช้โดยโครงการ jQuery, jQuery UI และ jQuery Mobile และสามารถทดสอบโค้ด JavaScript ทั่วไปได้

QUnit แบ่งปันประวัติกับ TestSwarm (ด้านบน):

QUnit ได้รับการพัฒนาโดย John Resig ในฐานะส่วนหนึ่งของ jQuery ในปี 2008 มีเอกสารชื่อบ้านและ API ของตัวเองทำให้ผู้อื่นสามารถใช้สำหรับการทดสอบหน่วยได้เช่นกัน ในขณะนั้นยังขึ้นอยู่กับ jQuery การเขียนใหม่ในปี 2009 ได้แก้ไขแล้วว่าตอนนี้ QUnit ทำงานได้อย่างสมบูรณ์แบบสแตนด์อโลน วิธีการยืนยันของ QUnit เป็นไปตามข้อกำหนดการทดสอบหน่วย CommonJS ซึ่งได้รับอิทธิพลจาก QUnit ในระดับหนึ่ง

โครงการบ้าน: http://qunitjs.com/

Sinon

เครื่องมือที่ยอดเยี่ยมอีกอย่างคือsinon.jsโดย Christian Johansen ผู้เขียนการพัฒนาจาวาสคริปต์ทดสอบที่ขับเคลื่อนด้วย ที่ดีที่สุดอธิบายด้วยตัวเอง:

การทดสอบแบบสแตนด์อโลนสายลับสตับและ mocks สำหรับ JavaScript ไม่มีการพึ่งพาทำงานกับกรอบการทดสอบหน่วยใด ๆ

แพทย์ฝึกหัด

เว็บไซต์ Intern เว็บให้เปรียบเทียบคุณลักษณะโดยตรงกับกรอบการทดสอบอื่น ๆ ในรายการนี้ มันมีคุณสมบัติเพิ่มเติมนอกกรอบกว่าระบบทดสอบอื่น ๆ ที่ใช้ JavaScript

ล้อเล่น

กรอบการทดสอบใหม่ แต่ยังทรงพลังมาก จะช่วยให้การทดสอบภาพรวมตามนี้เพิ่มความเร็วในการทดสอบและสร้างแบบไดนามิกใหม่ในแง่ของการทดสอบ

ลองดูหนึ่งในการเจรจาของพวกเขา: https://www.youtube.com/watch?v=cAKYQpTC7MA

ดีกว่ายัง: เริ่มต้น


2
จัสมินสามารถทำงานได้โดยไม่ใช้หัวกับ V8 แต่คุณสามารถใช้มันแบบโต้ตอบ แม้ว่า DOM ไม่จำเป็นสำหรับดอกมะลิ แต่codebase ของคุณอาจเข้าถึง DOM ด้วยระเบียบวินัยมันเป็นไปได้ที่จะกำจัดป้องกันเงื่อนไขหรือจัดเตรียม mocks สำหรับส่วนของรหัสที่เข้าถึง DOM และทำการทดสอบอย่างสมบูรณ์นอกเหนือจากการติดตั้ง HTML นอกจากนี้คุณยังสามารถรับการสนับสนุนบรรทัดคำสั่งและการแข่งขันโดยใช้โปรแกรมเสริม
jerseyboy

2
@ rehevkor5: Selenium ใช้สำหรับการทดสอบการรวมในขณะที่เครื่องมือที่ใช้สำหรับการทดสอบหน่วย typemock.com/unit-tests-integration-tests
gregers

26
นักวิ่งทดสอบเกือบทุกคนอาศัยเบราว์เซอร์ Wtf ไม่มีใครเคยเรียกใช้การทดสอบหน่วยเฉพาะทางฝั่งเซิร์ฟเวอร์ ????

2
มันจะเป็นการดีกว่าที่จะแบ่ง / หารแต่ละทางเลือกในคำตอบที่ต่างกันหรือไม่ มันอาจทำให้การลงคะแนนเสียงในปัจจุบันนี้เป็นโมฆะ แต่ฉันคิดว่ามันเหมาะสมที่สุด
cregox

2
@Raisen คุณสามารถเสียบ ES 2015 ลงในส่วนใหญ่ของพวกเขาด้วยBabelแต่AVAโดย Sindre Sorhus สร้างมันขึ้นมาแล้ว
gregers

64

ดูที่กรอบการทดสอบหน่วย Dojo Object Harness (DOH)ซึ่งเป็นเฟรมเวิร์กที่เป็นอิสระมากสำหรับการทดสอบหน่วย JavaScript และไม่มีการพึ่งพา Dojo ใด ๆ มีคำอธิบายที่ดีมากของมันที่เป็นหน่วยทดสอบการใช้งาน Web 2.0 ใช้ Dojo Harness

หากคุณต้องการทำการทดสอบ UI โดยอัตโนมัติ (จุดเจ็บของนักพัฒนาจำนวนมาก) - ตรวจสอบdoh.robot (หยุดทำงานชั่วคราวอัปเดต: ลิงค์อื่น ๆhttp://dojotoolkit.org/reference-guide/util/dohrobot.html )และdijit .robotx (ลดลงชั่วคราว) หลังถูกออกแบบมาสำหรับการทดสอบการยอมรับ ปรับปรุง:

บทความที่อ้างอิงจะอธิบายวิธีใช้พวกเขาวิธีเลียนแบบผู้ใช้ที่โต้ตอบกับ UI ของคุณโดยใช้เมาส์และ / หรือแป้นพิมพ์และวิธีบันทึกเซสชันการทดสอบเพื่อให้คุณสามารถ "เล่น" ได้ในภายหลังโดยอัตโนมัติ


ขอบคุณสำหรับคำแนะนำของ Dojo Object Harness ฉันไม่เคยพบมันมาก่อน ฉันขอขอบคุณข้อเสนอแนะอื่น ๆ - แต่ทีละขั้นตอน
Mark Levison

ฉันเคยใช้มันในโครงการก่อนหน้านี้และพบว่ามันมีค่า แต่จากนั้นอีกครั้งฉันไม่สามารถเปรียบเทียบ - ยังไม่ได้ใช้เฟรมเวิร์ก TDD อื่นใด
Rakesh Pai

ขอขอบคุณที่รายงานลิงก์ที่ไม่ทำงาน ฉันอัปเดตหนึ่งในนั้นและจะแทนที่ลิงก์ไปยังเอกสารของหุ่นยนต์ทันทีที่ฉันทำเว็บไซต์ใหม่
Eugene Lazutkin

สิ่งหนึ่งที่ฉันไม่ชอบเกี่ยวกับ DOH คือหมายเลขโทรศัพท์จะไม่ถูกรายงานเมื่อการยืนยันล้มเหลว ใส่ความคิดเห็นออกด้วยตนเองและทำการทดสอบอีกครั้ง
Aram Kocharyan

Dojo กำลังแทนที่ DOH ด้วยเฟรมเวิร์กการทดสอบภายใน ภายในมีประสิทธิภาพมากและมีการปรับปรุงมากมาย sitepen.com/blog/2014/02/18/…
user64141

34

Chutzpah - นักวิ่งทดสอบ JavaScript

ฉันสร้างโครงการโอเพนซอร์ซชื่อ Chutzpah ซึ่งเป็นตัวทดสอบวิ่งสำหรับทดสอบหน่วย JavaScript Chutzpah ช่วยให้คุณสามารถเรียกใช้การทดสอบหน่วย JavaScript จากบรรทัดคำสั่งและจากภายในของ Visual Studio นอกจากนี้ยังรองรับการทำงานในเซิร์ฟเวอร์รวมของ TeamCity อย่างต่อเนื่อง


7
ฉันเพิ่งเริ่มใช้ Chutzpah เพื่อเรียกใช้การทดสอบจัสมินภายในสตูดิโอภาพ - มันถูกรวมไว้อย่างดี: คลิกขวาในไฟล์ทดสอบและเลือก 'run js tests' หรือ 'run JS tests ในเบราว์เซอร์' ฉันใช้การทดสอบดอกมะลิแบบเดียวกันโดยใช้ JSTestDriver ฉันชอบ Chutzpah เพราะฉันระบุว่าฉันต้องโหลดไฟล์ใดที่ด้านบนของไฟล์ทดสอบ สำหรับ JSTestDriver ฉันต้องการไฟล์กำหนดค่าแยกต่างหาก
GarethOwen


14

BusterJS

นอกจากนี้ยังมีBusterJSจาก Christian Johansen ผู้เขียนการพัฒนาจาวาสคริปต์สำหรับการทดสอบขับเคลื่อนและเฟรมเวิร์ก Sinon จากเว็บไซต์:

Buster.JS เป็นกรอบการทดสอบ JavaScript ใหม่ มันทำการทดสอบเบราว์เซอร์โดยการทดสอบอัตโนมัติทำงานในเบราว์เซอร์จริง (คิดว่า JsTestDriver) เช่นเดียวกับการทดสอบ Node.js


10

google-js ทดสอบ:

กรอบการทดสอบ JavaScript ที่เผยแพร่โดย Google: https://github.com/google/gjstest

  • เริ่มต้นการทดสอบและเวลาดำเนินการอย่างรวดเร็วเป็นพิเศษโดยไม่ต้องเรียกใช้เบราว์เซอร์
  • ทำความสะอาดเอาต์พุตที่สามารถอ่านได้ในกรณีของการทดสอบการผ่านและการทดสอบที่ล้มเหลว
  • เบราว์เซอร์วิ่งทดสอบที่สามารถเพียงแค่ได้รับการฟื้นฟูเมื่อใดก็ตามที่มีการเปลี่ยนแปลง JS
  • ลักษณะและความหมายที่คล้ายกับGoogle Testสำหรับ C ++
  • ในตัวเยาะเย้ยกรอบที่ต้องใช้รหัสสำเร็จรูปน้อยที่สุด (เช่นไม่มี $tearDownหรือ$verifyAll) กับรูปแบบและความหมายขึ้นอยู่กับGoogle c ++ Mocking กรอบ

ขณะนี้ไม่มีไบนารีสำหรับ Windows


1
ดูเหมือนว่าจะสนใจ Github เกือบเป็นศูนย์และมันต้องใช้ระบบปฏิบัติการยูนิกซ์และฉันเป็นแฟนตัวยงของ windows ฉันไม่ได้ออกจากบ้านโดยไม่ได้จูบเครื่อง windows ของฉันเลย
vsync

8

ตอนนี้เรากำลังใช้ Qunit กับ Pavlov และ JSTestDriver ทั้งหมดเข้าด้วยกัน วิธีนี้ใช้ได้ดีสำหรับเรา

QUnit

Pavlov , แหล่งที่มา

jsTestDriver , แหล่งที่มา


คุณสนใจที่จะอธิบายบทบาทของแต่ละสิ่งในกระบวนการทดสอบทั้งหมดและวิธีที่พวกเขาเชื่อมโยงซึ่งกันและกัน
vsync

ขออภัยเป็นเวลานานและมีงานสัญญาหลายงานที่จะเรียกคืนรายละเอียดเกี่ยวกับเรื่องนี้
Tom Stickel

6

คุณมี "ทำงานบนเบราว์เซอร์ที่เกิดขึ้นจริง" เป็นมืออาชีพ แต่ในประสบการณ์ของฉันที่มีการต่อต้านเพราะช้า แต่สิ่งที่ทำให้มีค่าคือการขาดการจำลอง JS ที่เพียงพอจากทางเลือกที่ไม่ใช่เบราว์เซอร์ อาจเป็นได้ว่าหาก JS ของคุณซับซ้อนพอที่จะมีเพียงการทดสอบเบราว์เซอร์เท่านั้น แต่มีตัวเลือกเพิ่มเติมให้พิจารณา:

HtmlUnit : "มีการสนับสนุน JavaScript ที่ค่อนข้างดี (ซึ่งปรับปรุงอยู่ตลอดเวลา) และสามารถทำงานได้แม้จะมีไลบรารี AJAX ที่ค่อนข้างซับซ้อนโดยจำลอง Firefox หรือ Internet Explorer ขึ้นอยู่กับการกำหนดค่าที่คุณต้องการใช้" หากการจำลองนั้นดีพอสำหรับการใช้งานของคุณมันจะเร็วกว่าการขับเบราว์เซอร์มาก

แต่ HtmlUnit อาจรองรับ JS ได้ดี แต่คุณไม่ชอบ Java ใช่ไหม จากนั้นอาจจะ:

Celerity : Watir API ทำงานบน JRuby ซึ่งสนับสนุนโดย HtmlUnit

หรือในทำนองเดียวกัน

Schnell : wrapper JRuby อีกอันของ HtmlUnit

แน่นอนถ้า HtmlUnit ไม่ดีพอและคุณต้องขับรถเบราว์เซอร์แล้วคุณอาจพิจารณาWatir ที่จะขับรถ JS


6

YUI มีกรอบการทดสอบเช่นกัน วิดีโอนี้จาก Yahoo! Theatre เป็นการแนะนำที่ดีแม้ว่าจะมีข้อมูลพื้นฐานมากมายเกี่ยวกับ TDD ล่วงหน้า

เฟรมเวิร์กนี้เป็นแบบทั่วไปและสามารถทำงานกับ JavaScript หรือไลบรารี JS ใด ๆ



3

คุณอาจสนใจในกรอบการทดสอบหน่วยที่เป็นส่วนหนึ่งของqooxdooซึ่งเป็นเฟรมเวิร์ก RIA โอเพนซอร์สที่คล้ายกับ Dojo, ExtJS เป็นต้น แต่มีห่วงโซ่เครื่องมือค่อนข้างครอบคลุม

ลองรุ่นออนไลน์ของTestRunner คำแนะนำ: กดลูกศรสีเทาที่ด้านบนซ้าย (ควรทำให้ชัดเจนยิ่งขึ้น) เป็นปุ่ม "เล่น" ที่รันการทดสอบที่เลือก

เพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับการเรียน JS ที่ช่วยให้คุณกำหนดทดสอบหน่วยของคุณให้ดูออนไลน์ผู้ชม API

สำหรับการทดสอบ UI อัตโนมัติ (อ้างอิงจาก Selenium RC) ให้ตรวจสอบโครงการเครื่องมือจำลอง



3

เราได้เพิ่มการรวม JUnit ให้กับจาวาสคริปต์ของเราในการสร้างโค้ดจาวาสคริปต์ ST-JS ( http://st-js.org ) เฟรมเวิร์กสร้างขึ้นเพื่อ Javascript ที่สอดคล้องกันสำหรับทั้งรหัสที่ทดสอบและหน่วยทดสอบและส่งรหัสไปยังเบราว์เซอร์ที่แตกต่างกัน

ไม่จำเป็นต้องมีเซิร์ฟเวอร์แยกต่างหากเนื่องจากตัวทดสอบหน่วยเปิดพอร์ต http ที่จำเป็น (และปิดเมื่อการทดสอบเสร็จสิ้น) เฟรมเวิร์กจัดการกับ Java stacktrace เพื่อให้การยืนยันที่ล้มเหลวแสดงอย่างถูกต้องโดยปลั๊กอิน JUnit Eclipse นี่คือตัวอย่างง่ายๆกับ jQuery และ Mockjax:

@RunWith(STJSTestDriverRunner.class)
@HTMLFixture("<div id='fortune'></div>")

@Scripts({ "classpath://jquery.js",
       "classpath://jquery.mockjax.js", "classpath://json2.js" })
public class MockjaxExampleTest {
  @Test
  public void myTest() {
    $.ajaxSetup($map("async", false));
    $.mockjax(new MockjaxOptions() {
      {
        url = "/restful/fortune";
        responseText = new Fortune() {
          {
            status = "success";
            fortune = "Are you a turtle?";
          }
        };
      }
    });

    $.getJSON("/restful/fortune", null, new Callback3<Fortune, String, JQueryXHR>() {
      @Override
      public void $invoke(Fortune response, String p2, JQueryXHR p3) {
        if (response.status.equals("success")) {
          $("#fortune").html("Your fortune is: " + response.fortune);
        } else {
          $("#fortune").html("Things do not look good, no fortune was told");
        }

      }
    });
    assertEquals("Your fortune is: Are you a turtle?", $("#fortune").html());
  }

  private static class Fortune {
    public String status;
    public String fortune;
  }
}

2

MochiKitมีกรอบการทดสอบที่เรียกว่า SimpleTest ที่ดูเหมือนจะติดอยู่ นี่คือการโพสต์บล็อกจากผู้เขียนต้นฉบับ


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