ฉันได้พิจารณาและพิจารณาการทดสอบหน่วย JavaScript และเครื่องมือทดสอบจำนวนมาก แต่ไม่สามารถหาตัวเลือกที่เหมาะสมเพื่อให้สอดคล้องกับ TDD ได้อย่างสมบูรณ์ ดังนั้นมีเครื่องมือทดสอบหน่วย JavaScript ที่สอดคล้องกับ TDD อย่างสมบูรณ์หรือไม่
ฉันได้พิจารณาและพิจารณาการทดสอบหน่วย JavaScript และเครื่องมือทดสอบจำนวนมาก แต่ไม่สามารถหาตัวเลือกที่เหมาะสมเพื่อให้สอดคล้องกับ TDD ได้อย่างสมบูรณ์ ดังนั้นมีเครื่องมือทดสอบหน่วย JavaScript ที่สอดคล้องกับ TDD อย่างสมบูรณ์หรือไม่
คำตอบ:
Karma เป็นนักวิ่งทดสอบ JavaScript ที่สร้างขึ้นด้วย Node.js และมีความหมายสำหรับการทดสอบหน่วย
ไม้โปรแทรกเตอร์ใช้สำหรับการทดสอบแบบ end-to-end และใช้ Selenium Web Driver ในการทดสอบ
ทั้งสองถูกสร้างขึ้นโดยทีมเชิงมุม คุณสามารถใช้ห้องสมุดยืนยันใด ๆ ที่คุณต้องการด้วย
Screencast: Karma เริ่มต้นใช้งาน
ที่เกี่ยวข้อง :
ข้อดี :
ข้อเสีย :
ฉันไม่มีเงื่อนไขโดยสิ้นเชิงที่จะแสดงความคิดเห็นเกี่ยวกับคุณสมบัติจุดแข็งและจุดอ่อนของ mocha.js แต่มีคนแนะนำฉันให้ฉันไว้วางใจในชุมชน JS
รายการคุณสมบัติตามที่รายงานโดยเว็บไซต์:
ไม่มีอยู่อีกต่อไปเปลี่ยนเส้นทางไปยังsequential.jsแทน
Yolpo เป็นเครื่องมือในการเห็นภาพการทำงานของจาวาสคริปต์ นักพัฒนา Javascript API ได้รับการสนับสนุนให้เขียนกรณีการใช้เพื่อแสดงและบอก API ของพวกเขา กรณีการใช้งานดังกล่าวเป็นพื้นฐานของการทดสอบการถดถอย
นักวิ่งทดสอบแห่งอนาคตพร้อมการสนับสนุนในตัวสำหรับ ES2015 แม้ว่า JavaScript จะเป็นเธรดเดียว แต่ IO ใน Node.js สามารถเกิดขึ้นพร้อมกันได้เนื่องจากลักษณะของ async AVA ใช้ประโยชน์จากสิ่งนี้และดำเนินการทดสอบของคุณพร้อมกันซึ่งเป็นประโยชน์อย่างยิ่งสำหรับการทดสอบอย่างหนักของ IO นอกจากนี้ไฟล์ทดสอบจะทำงานแบบขนานเป็นกระบวนการแยกกันช่วยให้คุณมีประสิทธิภาพที่ดียิ่งขึ้นและมีสภาพแวดล้อมแบบแยกสำหรับแต่ละไฟล์ทดสอบ
ตัวทดสอบ 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)
ข้อดี :
ข้อเสีย :
* TestSwarm เป็นเซิร์ฟเวอร์การรวมอย่างต่อเนื่องในขณะที่คุณต้องการเซิร์ฟเวอร์ CI แยกต่างหากสำหรับ Buster.js อย่างไรก็ตามมันส่งออกรายงาน xUnit XML ดังนั้นจึงควรรวมเข้ากับฮัดสัน , แบมบูหรือเซิร์ฟเวอร์ CI อื่น ๆ ได้ง่าย
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 มุ่งเน้นไปที่การทดสอบ 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.jsโดย Christian Johansen ผู้เขียนการพัฒนาจาวาสคริปต์ทดสอบที่ขับเคลื่อนด้วย ที่ดีที่สุดอธิบายด้วยตัวเอง:
การทดสอบแบบสแตนด์อโลนสายลับสตับและ mocks สำหรับ JavaScript ไม่มีการพึ่งพาทำงานกับกรอบการทดสอบหน่วยใด ๆ
เว็บไซต์ Intern เว็บให้เปรียบเทียบคุณลักษณะโดยตรงกับกรอบการทดสอบอื่น ๆ ในรายการนี้ มันมีคุณสมบัติเพิ่มเติมนอกกรอบกว่าระบบทดสอบอื่น ๆ ที่ใช้ JavaScript
กรอบการทดสอบใหม่ แต่ยังทรงพลังมาก จะช่วยให้การทดสอบภาพรวมตามนี้เพิ่มความเร็วในการทดสอบและสร้างแบบไดนามิกใหม่ในแง่ของการทดสอบ
ลองดูหนึ่งในการเจรจาของพวกเขา: https://www.youtube.com/watch?v=cAKYQpTC7MA
ดีกว่ายัง: เริ่มต้น
ดูที่กรอบการทดสอบหน่วย 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 ของคุณโดยใช้เมาส์และ / หรือแป้นพิมพ์และวิธีบันทึกเซสชันการทดสอบเพื่อให้คุณสามารถ "เล่น" ได้ในภายหลังโดยอัตโนมัติ
ฉันสร้างโครงการโอเพนซอร์ซชื่อ Chutzpah ซึ่งเป็นตัวทดสอบวิ่งสำหรับทดสอบหน่วย JavaScript Chutzpah ช่วยให้คุณสามารถเรียกใช้การทดสอบหน่วย JavaScript จากบรรทัดคำสั่งและจากภายในของ Visual Studio นอกจากนี้ยังรองรับการทำงานในเซิร์ฟเวอร์รวมของ TeamCity อย่างต่อเนื่อง
ส่วน JavaScript ของรายการ Wikipedia, รายการของกรอบการทดสอบหน่วยให้รายการของตัวเลือกที่มี มันบ่งชี้ว่าพวกเขาทำงานฝั่งไคลเอ็นต์ฝั่งเซิร์ฟเวอร์หรือทั้งสองอย่าง
นอกจากนี้ยังมีBusterJSจาก Christian Johansen ผู้เขียนการพัฒนาจาวาสคริปต์สำหรับการทดสอบขับเคลื่อนและเฟรมเวิร์ก Sinon จากเว็บไซต์:
Buster.JS เป็นกรอบการทดสอบ JavaScript ใหม่ มันทำการทดสอบเบราว์เซอร์โดยการทดสอบอัตโนมัติทำงานในเบราว์เซอร์จริง (คิดว่า JsTestDriver) เช่นเดียวกับการทดสอบ Node.js
กรอบการทดสอบ JavaScript ที่เผยแพร่โดย Google: https://github.com/google/gjstest
- เริ่มต้นการทดสอบและเวลาดำเนินการอย่างรวดเร็วเป็นพิเศษโดยไม่ต้องเรียกใช้เบราว์เซอร์
- ทำความสะอาดเอาต์พุตที่สามารถอ่านได้ในกรณีของการทดสอบการผ่านและการทดสอบที่ล้มเหลว
- เบราว์เซอร์วิ่งทดสอบที่สามารถเพียงแค่ได้รับการฟื้นฟูเมื่อใดก็ตามที่มีการเปลี่ยนแปลง JS
- ลักษณะและความหมายที่คล้ายกับGoogle Testสำหรับ C ++
- ในตัวเยาะเย้ยกรอบที่ต้องใช้รหัสสำเร็จรูปน้อยที่สุด (เช่นไม่มี
$tearDown
หรือ$verifyAll
) กับรูปแบบและความหมายขึ้นอยู่กับGoogle c ++ Mocking กรอบ
ขณะนี้ไม่มีไบนารีสำหรับ Windows
ตอนนี้เรากำลังใช้ Qunit กับ Pavlov และ JSTestDriver ทั้งหมดเข้าด้วยกัน วิธีนี้ใช้ได้ดีสำหรับเรา
คุณมี "ทำงานบนเบราว์เซอร์ที่เกิดขึ้นจริง" เป็นมืออาชีพ แต่ในประสบการณ์ของฉันที่มีการต่อต้านเพราะช้า แต่สิ่งที่ทำให้มีค่าคือการขาดการจำลอง JS ที่เพียงพอจากทางเลือกที่ไม่ใช่เบราว์เซอร์ อาจเป็นได้ว่าหาก JS ของคุณซับซ้อนพอที่จะมีเพียงการทดสอบเบราว์เซอร์เท่านั้น แต่มีตัวเลือกเพิ่มเติมให้พิจารณา:
HtmlUnit : "มีการสนับสนุน JavaScript ที่ค่อนข้างดี (ซึ่งปรับปรุงอยู่ตลอดเวลา) และสามารถทำงานได้แม้จะมีไลบรารี AJAX ที่ค่อนข้างซับซ้อนโดยจำลอง Firefox หรือ Internet Explorer ขึ้นอยู่กับการกำหนดค่าที่คุณต้องการใช้" หากการจำลองนั้นดีพอสำหรับการใช้งานของคุณมันจะเร็วกว่าการขับเบราว์เซอร์มาก
แต่ HtmlUnit อาจรองรับ JS ได้ดี แต่คุณไม่ชอบ Java ใช่ไหม จากนั้นอาจจะ:
Celerity : Watir API ทำงานบน JRuby ซึ่งสนับสนุนโดย HtmlUnit
หรือในทำนองเดียวกัน
Schnell : wrapper JRuby อีกอันของ HtmlUnit
แน่นอนถ้า HtmlUnit ไม่ดีพอและคุณต้องขับรถเบราว์เซอร์แล้วคุณอาจพิจารณาWatir ที่จะขับรถ JS
YUI มีกรอบการทดสอบเช่นกัน วิดีโอนี้จาก Yahoo! Theatre เป็นการแนะนำที่ดีแม้ว่าจะมีข้อมูลพื้นฐานมากมายเกี่ยวกับ TDD ล่วงหน้า
เฟรมเวิร์กนี้เป็นแบบทั่วไปและสามารถทำงานกับ JavaScript หรือไลบรารี JS ใด ๆ
คุณอาจสนใจในกรอบการทดสอบหน่วยที่เป็นส่วนหนึ่งของqooxdooซึ่งเป็นเฟรมเวิร์ก RIA โอเพนซอร์สที่คล้ายกับ Dojo, ExtJS เป็นต้น แต่มีห่วงโซ่เครื่องมือค่อนข้างครอบคลุม
ลองรุ่นออนไลน์ของTestRunner คำแนะนำ: กดลูกศรสีเทาที่ด้านบนซ้าย (ควรทำให้ชัดเจนยิ่งขึ้น) เป็นปุ่ม "เล่น" ที่รันการทดสอบที่เลือก
เพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับการเรียน JS ที่ช่วยให้คุณกำหนดทดสอบหน่วยของคุณให้ดูออนไลน์ผู้ชม API
สำหรับการทดสอบ UI อัตโนมัติ (อ้างอิงจาก Selenium RC) ให้ตรวจสอบโครงการเครื่องมือจำลอง
คุณควรมีลักษณะที่env.js ดูบล็อกของฉันสำหรับตัวอย่างวิธีเขียนการทดสอบหน่วยด้วย env.js
เราได้เพิ่มการรวม 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;
}
}
MochiKitมีกรอบการทดสอบที่เรียกว่า SimpleTest ที่ดูเหมือนจะติดอยู่ นี่คือการโพสต์บล็อกจากผู้เขียนต้นฉบับ