Tôi đã xem xét và xem xét nhiều công cụ kiểm tra và thử nghiệm đơn vị JavaScript, nhưng không thể tìm thấy một tùy chọn phù hợp để duy trì hoàn toàn tuân thủ TDD. Vậy, có công cụ kiểm tra đơn vị JavaScript nào tuân thủ TDD hoàn toàn không?
Tôi đã xem xét và xem xét nhiều công cụ kiểm tra và thử nghiệm đơn vị JavaScript, nhưng không thể tìm thấy một tùy chọn phù hợp để duy trì hoàn toàn tuân thủ TDD. Vậy, có công cụ kiểm tra đơn vị JavaScript nào tuân thủ TDD hoàn toàn không?
Câu trả lời:
Karma là một trình chạy thử nghiệm JavaScript được xây dựng với Node.js và có nghĩa là để thử nghiệm đơn vị.
Protractor dành cho thử nghiệm từ đầu đến cuối và sử dụng Selenium Web Driver để lái thử.
Cả hai đã được thực hiện bởi nhóm Angular. Bạn có thể sử dụng bất kỳ thư viện khẳng định nào bạn muốn với một trong hai.
Screencast: Karma Bắt đầu
liên quan :
ưu :
Nhược điểm :
Tôi hoàn toàn không đủ điều kiện để nhận xét về các tính năng, điểm mạnh và điểm yếu của mocha.js, nhưng nó chỉ được đề xuất cho tôi bởi một người mà tôi tin tưởng trong cộng đồng JS.
Danh sách các tính năng, như báo cáo của trang web của mình:
Điều này không còn tồn tại, chuyển hướng đến sequential.js thay vào đó
Yolpo là một công cụ để trực quan hóa việc thực thi javascript. Các nhà phát triển API Javascript được khuyến khích viết các trường hợp sử dụng của họ để hiển thị và cho biết API của họ. Các trường hợp sử dụng như vậy tạo thành cơ sở của các bài kiểm tra hồi quy.
Người chạy thử tương lai với sự hỗ trợ tích hợp cho ES2015. Mặc dù JavaScript là một luồng đơn, IO trong Node.js có thể xảy ra song song do tính chất không đồng bộ của nó. AVA tận dụng lợi thế này và chạy các bài kiểm tra của bạn đồng thời, điều này đặc biệt có lợi cho các bài kiểm tra nặng IO. Ngoài ra, các tệp kiểm tra được chạy song song dưới dạng các quy trình riêng biệt, mang lại cho bạn hiệu suất cao hơn và môi trường tách biệt cho mỗi tệp kiểm tra.
Trình chạy thử nghiệm JavaScript được xây dựng với Node.js. Rất mô-đun và linh hoạt. Nó đi kèm với thư viện khẳng định riêng của nó, nhưng bạn có thể thêm thư viện của riêng bạn nếu bạn muốn. Các thư viện khẳng định được tách rời, vì vậy bạn cũng có thể sử dụng nó với thử vận động viên khác. Thay vì sử dụng assert(!...)
hoặc expect(...).not...
, nó sử dụng refute(...)
đó là một imho xoắn đẹp.
Một bộ công cụ kiểm tra JavaScript trình duyệt. Nó thực hiện kiểm tra trình duyệt với tự động hóa trình duyệt (nghĩ JsTestDriver), kiểm tra trang HTML tĩnh kiểu QUnit, kiểm tra trong các trình duyệt không đầu (PhantomJS, jsdom, ...), v.v. Hãy nhìn vào tổng quan !
Một bộ công cụ thử nghiệm Node.js. Bạn nhận được cùng thư viện trường hợp thử nghiệm, thư viện xác nhận, v.v ... Điều này cũng tuyệt vời cho trình duyệt lai và mã Node.js. Viết trường hợp thử nghiệm của bạn với Buster.JS và chạy cả hai trong Node.js và trong một trình duyệt thực.
Screencast: Buster.js Bắt đầu (2:45)
ưu :
Nhược điểm :
* TestSwarm cũng là một máy chủ Tích hợp liên tục, trong khi bạn cần một máy chủ CI riêng cho Buster.js. Tuy nhiên, nó thực hiện các báo cáo XML xUnit, do đó, nó có thể dễ dàng tích hợp với các máy chủ Hudson , Bamboo hoặc CI khác.
https://github.com/jquery/testswarm
TestSwarm chính thức không còn được phát triển tích cực như đã nêu trên trang web GitHub của họ. Họ đề xuất Karma, browserstack-runner hoặc Intern.
Đây là khung theo hướng hành vi (như được nêu trong trích dẫn bên dưới) có thể khiến các nhà phát triển quan tâm quen thuộc với Ruby hoặc Ruby on Rails. Cú pháp dựa trên RSpec được sử dụng để thử nghiệm trong các dự án Rails.
Thông số kỹ thuật của Jasmine có thể được chạy từ một trang html (theo kiểu qUnit) hoặc từ một người chạy thử nghiệm (dưới dạng Karma).
Jasmine là một khung phát triển dựa trên hành vi để kiểm tra mã JavaScript của bạn. Nó không phụ thuộc vào bất kỳ khung JavaScript nào khác. Nó không yêu cầu DOM.
Nếu bạn có kinh nghiệm với khung thử nghiệm này, vui lòng đóng góp với nhiều thông tin hơn :)
Trang chủ dự án: http://jasmine.github.io/
QUnit tập trung vào việc thử nghiệm JavaScript trong trình duyệt đồng thời cung cấp càng nhiều tiện lợi cho nhà phát triển càng tốt. Blurb từ trang web:
QUnit là bộ kiểm tra đơn vị JavaScript mạnh mẽ, dễ sử dụng. Nó được sử dụng bởi các dự án jQuery, jQuery UI và jQuery Mobile và có khả năng kiểm tra bất kỳ mã JavaScript chung nào
QUnit chia sẻ một số lịch sử với TestSwarm (ở trên):
QUnit ban đầu được phát triển bởi John Resig như một phần của jQuery. Vào năm 2008, nó đã có tài liệu về nhà, tên và API của riêng mình, cho phép những người khác sử dụng nó để thử nghiệm đơn vị của họ. Tại thời điểm đó nó vẫn phụ thuộc vào jQuery. Một bản viết lại vào năm 2009 đã sửa lỗi đó, bây giờ QUnit chạy hoàn toàn độc lập. Các phương thức khẳng định của QUnit tuân theo thông số kỹ thuật Kiểm tra đơn vị CommonJS, ở một mức độ nào đó chịu ảnh hưởng của QUnit.
Trang chủ dự án: http://qunitjs.com/
Một công cụ tuyệt vời khác là sinon.js của Christian Johansen, tác giả của Phát triển JavaScript dựa trên thử nghiệm . Mô tả tốt nhất của mình:
Các gián điệp thử nghiệm độc lập, sơ khai và giả cho JavaScript. Không phụ thuộc làm việc với bất kỳ khung thử nghiệm đơn vị.
Trang web thực tập cung cấp một so sánh tính năng trực tiếp với các khung thử nghiệm khác trong danh sách này. Nó cung cấp nhiều tính năng vượt trội hơn bất kỳ hệ thống thử nghiệm dựa trên JavaScript nào khác.
Một khung thử nghiệm mới nhưng rất mạnh mẽ. Nó cho phép thử nghiệm dựa trên ảnh chụp nhanh, điều này cũng làm tăng tốc độ thử nghiệm và tạo ra một động lực mới về mặt thử nghiệm
Kiểm tra một trong những cuộc nói chuyện của họ: https://www.youtube.com/watch?v=cAKYQpTC7MA
Tốt hơn nữa: Bắt đầu
Hãy xem khung kiểm tra đơn vị Dojo khai thác đối tượng (DOH), khai thác độc lập khung khá nhiều để kiểm tra đơn vị JavaScript và không có bất kỳ phụ thuộc Dojo nào. Có một mô tả rất hay về nó tại Đơn vị thử nghiệm các ứng dụng Web 2.0 bằng cách sử dụng Khai thác mục tiêu Dojo .
Nếu bạn muốn tự động hóa kiểm tra giao diện người dùng (một điểm đau của nhiều nhà phát triển) - hãy xem doh.robot (tạm thời xuống. Cập nhật: liên kết khác http://dojotoolkit.org/reference-guide/util/dohrobot.html ) và dijit .robotx (tạm thời xuống) . Thứ hai được thiết kế để thử nghiệm chấp nhận. Cập nhật:
Các bài viết được tham khảo giải thích cách sử dụng chúng, cách mô phỏng người dùng tương tác với giao diện người dùng của bạn bằng chuột và / hoặc bàn phím và cách ghi lại phiên kiểm tra để bạn có thể "phát" nó sau.
Tôi đã tạo một dự án nguồn mở có tên Chutzpah, một trình chạy thử nghiệm cho các bài kiểm tra đơn vị JavaScript. Chutzpah cho phép bạn chạy thử nghiệm đơn vị JavaScript từ dòng lệnh và từ bên trong Visual Studio. Nó cũng hỗ trợ chạy trong máy chủ tích hợp liên tục TeamCity.
Phần JavaScript của mục nhập Wikipedia, Danh sách khung kiểm tra đơn vị , cung cấp danh sách các lựa chọn khả dụng. Nó cho biết họ làm việc phía máy khách, phía máy chủ hay cả hai.
Ngoài ra còn có BusterJS từ Christian Johansen, tác giả của Test Driven Javascript Development và Sinon framework. Từ trang web:
Buster.JS là một khung thử nghiệm JavaScript mới. Nó thực hiện kiểm tra trình duyệt bằng cách tự động chạy thử nghiệm trong các trình duyệt thực tế (nghĩ là JsTestDriver), cũng như thử nghiệm Node.js.
Khung thử nghiệm JavaScript do Google phát hành: https://github.com/google/gjstest
- Kiểm tra thời gian khởi động và thực hiện cực nhanh, không cần phải chạy trình duyệt.
- Đầu ra sạch, dễ đọc trong trường hợp cả hai bài kiểm tra đạt và không đạt.
- Một trình chạy thử nghiệm dựa trên trình duyệt có thể được làm mới bất cứ khi nào thay đổi JS.
- Phong cách và ngữ nghĩa giống với Google Test cho C ++.
- Khung mô phỏng tích hợp sẵn yêu cầu mã soạn sẵn tối thiểu (ví dụ: không
$tearDown
hoặc$verifyAll
) với kiểu dáng và ngữ nghĩa dựa trên Khung mô phỏng Google C ++ .
Hiện tại không có nhị phân cho Windows
Chúng tôi hiện đang sử dụng Qunit với Pavlov và JSTestDriver cùng nhau. Cách tiếp cận này hoạt động tốt cho chúng tôi.
Bạn có "chạy trên trình duyệt thực tế" như một người chuyên nghiệp, nhưng theo kinh nghiệm của tôi đó là một kẻ lừa đảo vì nó chậm. Nhưng điều làm cho nó có giá trị là thiếu sự mô phỏng JS đầy đủ từ các lựa chọn không phải trình duyệt. Có thể là nếu JS của bạn đủ phức tạp để chỉ một bài kiểm tra trong trình duyệt sẽ đủ, nhưng có một vài lựa chọn khác để xem xét:
HtmlUnit : "Nó có hỗ trợ JavaScript khá tốt (liên tục cải thiện) và có thể hoạt động ngay cả với các thư viện AJAX khá phức tạp, mô phỏng Firefox hoặc Internet Explorer tùy thuộc vào cấu hình bạn muốn sử dụng." Nếu mô phỏng của nó đủ tốt để bạn sử dụng thì nó sẽ nhanh hơn nhiều so với lái trình duyệt.
Nhưng có lẽ HtmlUnit có hỗ trợ JS đủ tốt nhưng bạn không thích Java? Sau đó có thể:
Celerity : API Watir chạy trên JRuby được hỗ trợ bởi HtmlUnit.
hoặc tương tự
Schnell : một trình bao bọc khác của JRuby của HtmlUnit.
Tất nhiên, nếu HtmlUnit không đủ tốt và bạn phải lái trình duyệt thì bạn có thể xem xét Watir để điều khiển JS của mình .
YUI có một khung kiểm tra là tốt. Video này từ Yahoo! Nhà hát là một giới thiệu tốt đẹp, mặc dù có rất nhiều điều cơ bản về TDD lên phía trước.
Khung này là chung và có thể chạy với bất kỳ thư viện JavaScript hoặc JS nào.
Bạn cũng có thể quan tâm đến khung thử nghiệm đơn vị là một phần của qooxdoo , khung RIA mã nguồn mở tương tự như Dojo, ExtJS, v.v. nhưng với chuỗi công cụ khá toàn diện.
Hãy thử phiên bản trực tuyến của testrunner . Gợi ý: nhấn mũi tên màu xám ở trên cùng bên trái (nên được làm rõ hơn). Đó là nút "phát" để chạy các bài kiểm tra đã chọn.
Để tìm hiểu thêm về các lớp JS cho phép bạn xác định các bài kiểm tra đơn vị của mình, hãy xem trực tuyến xem trình xem API .
Để kiểm tra giao diện người dùng tự động (dựa trên Selenium RC), hãy xem dự án Trình mô phỏng .
Bạn nên có một cái nhìn tại env.js . Xem blog của tôi để biết ví dụ về cách viết bài kiểm tra đơn vị với env.js.
Chúng tôi đã thêm tích hợp JUnit vào Java để tạo mã Javascript ST-JS ( http://st-js.org ). Khung công tác tạo ra Javascript tương ứng cho cả mã được kiểm tra và đơn vị kiểm tra và gửi mã đến các trình duyệt khác nhau.
Không cần một máy chủ riêng vì người chạy thử đơn vị sẽ mở cổng http cần thiết (và đóng nó sau khi thử nghiệm kết thúc). Khung công tác thao tác ngăn xếp Java để các xác nhận thất bại được hiển thị chính xác bởi trình cắm JUnit Eclipse. Đây là một ví dụ đơn giản với jQuery và 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 có một khung thử nghiệm có tên SimpleTest mà dường như đã bắt kịp. Đây là một bài viết từ tác giả gốc .