Công cụ kiểm thử đơn vị JavaScript cho TDD
Tôi đã xem xét và cân nhắc nhiều bài kiểm tra đơn vị JavaScript và các công cụ kiểm tra, nhưng không thể tìm thấy một lựa chọn phù hợp để hoàn toàn tuân thủ TDD. Vậy, có công cụ kiểm tra đơn vị JavaScript nào hoàn toàn tuân thủ TDD không?
Câu trả lời #1
Karma hay Thước đo góc
Karma là một công cụ chạy thử JavaScript được xây dựng bằng Node.js và dành cho kiểm thử đơn vị.
Protractor là để kiểm thử đầu-cuối và sử dụng Selenium Web Driver để điều khiển các bài kiểm thử.
Cả hai đều được tạo ra bởi nhóm Angular. Bạn có thể sử dụng bất kỳ thư viện xác nhận nào bạn muốn với cả hai.
Quay màn hình: Bắt đầu với Karma
liên quan:
- Tôi có nên sử dụng Protractor hay Karma cho việc kiểm tra đầu-cuối của mình không?
- Có thể sử dụng Protractor và Karma cùng nhau không?
Ưu điểm:
- Sử dụng Node.js, nên tương thích với Win/OS X/Linux
- Chạy các bài kiểm tra từ trình duyệt hoặc không giao diện với PhantomJS
- Chạy trên nhiều khách hàng cùng một lúc
- Tùy chọn để khởi chạy, ghi lại và tự động tắt trình duyệt
- Tùy chọn chạy máy chủ/khách trên máy tính phát triển hoặc riêng biệt
- Chạy kiểm thử từ dòng lệnh (có thể tích hợp vào ant/maven)
- Viết các bài kiểm tra theo phong cách xUnit hoặc BDD
- Hỗ trợ nhiều khuôn khổ kiểm thử JavaScript
- Tự động chạy kiểm tra khi lưu
- Yêu cầu proxy qua miền
Có thể tùy chỉnh:
- Mở rộng nó để bao bọc các framework thử nghiệm khác (Jasmine, Mocha, QUnit tích hợp sẵn)
- Những khẳng định/bác bỏ của chính bạn
- Nhà báo
- Trình khởi chạy trình duyệt
Nhược điểm:
- Không hỗ trợ kiểm thử Node.js (tức là backend)
- Chưa có plugin cho Eclipse
- Không có lịch sử kết quả kiểm tra trước
mocha.js
Tôi hoàn toàn không đủ trình độ để 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ó vừa được một người mà tôi tin cậy trong cộng đồng JS giới thiệu cho tôi.
Danh sách các tính năng, theo báo cáo của trang web của nó:
- hỗ trợ trình duyệt
- hỗ trợ async đơn giản, bao gồm cả promises
- báo cáo phạm vi kiểm thử
- hỗ trợ khác biệt chuỗi
- JavaScript # API để chạy các bài kiểm tra
- trạng thái thoát thích hợp cho hỗ trợ CI, v.v.
- tự động phát hiện và tắt tô màu cho các thiết bị không phải tty
- ánh xạ các ngoại lệ chưa được bắt sang trường hợp kiểm tra đúng
- hỗ trợ hết giờ kiểm tra bất đồng bộ
- timeout cụ thể cho bài kiểm tra
- hỗ trợ thông báo growl
- báo cáo thời gian kiểm tra
- làm nổi bật các bài kiểm tra chậm
- hỗ trợ giám sát tệp
- phát hiện rò rỉ biến toàn cục
- tùy chọn chạy các bài kiểm tra phù hợp với biểu thức chính quy
- tự động thoát để ngăn "bị treo" với một vòng lặp đang hoạt động
- dễ dàng tạo siêu bộ & ca kiểm thử
- hỗ trợ tập tin mocha.opts
- tiêu đề bộ kiểm thử có thể nhấp để lọc việc thực thi kiểm thử
- hỗ trợ gỡ lỗi node
- phát hiện nhiều lần gọi đến done()
- sử dụng bất kỳ thư viện khẳng định nào bạn muốn
- báo cáo mở rộng, đi kèm với hơn 9 bộ báo cáo
- DSL kiểm thử có thể mở rộng hoặc "giao diện"
- trước, sau, trước mỗi, sau mỗi hook
- hỗ trợ trình biên dịch tùy ý (coffee-script v.v.)
- Gói TextMate
yolpo
Điều này không còn tồn tại nữa, thay vào đó chuyển hướng đến sequential.js
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ọ để trình bày và giải thích API của họ. Những trường hợp sử dụng như vậy hình thành cơ sở của các bài kiểm tra hồi quy.
AVA
Trình chạy thử nghiệm mang tính tương lai với hỗ trợ tích hợp cho ES2015. Mặc dù JavaScript là đơn luồng, I/O trong Node.js có thể xảy ra song song nhờ vào tính chất bất đồng bộ của nó. AVA tận dụng điều 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 về I/O. Ngoài ra, các tệp kiểm tra được chạy đồng thời như các tiến trình riêng biệt, giúp bạn có hiệu suất tốt hơn và một môi trường cô lập cho mỗi tệp kiểm tra.
- Tối giản và nhanh
- Cú pháp kiểm tra đơn giản
- Chạy các bài kiểm tra đồng thời
- Thực thi việc viết các bài kiểm tra nguyên tử
- Không có biến toàn cục ngầm định
- Môi trường tách biệt cho từng tệp kiểm thử
- Viết các bài kiểm tra của bạn bằng ES2015
- Hứa hỗ trợ
- Hỗ trợ hàm tạo
- Hỗ trợ hàm bất đồng bộ
- Hỗ trợ có thể quan sát được
- Cải thiện các lệnh khẳng định
- Đầu ra TAP tùy chọn
- Làm sạch các dấu vết ngăn xếp
Buster.js
Một trình chạy kiểm thử JavaScript được xây dựng bằng 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 mình, nhưng bạn có thể thêm thư viện của riêng bạn nếu muốn. 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 các trình chạy kiểm thử khác. Thay vì sử dụng assert(!...) hoặc expect(...).not..., nó sử dụng refute(...) một cách sáng tạo theo ý kiến của tôi.
Một bộ công cụ thử nghiệm JavaScript trên trình duyệt. Nó thực hiện thử nghiệm trình duyệt với tự động hóa trình duyệt (nghĩ đến JsTestDriver), thử nghiệm trang HTML tĩnh theo phong cách QUnit, thử nghiệm trên các trình duyệt không giao diện (PhantomJS, jsdom, ...), và nhiều hơn nữa. Hãy xem qua phần tổng quan!
Một bộ công cụ kiểm thử Node.js. Bạn nhận được cùng thư viện trường hợp kiểm thử, thư viện khẳng định, v.v. Điều này cũng tuyệt vời cho mã lai giữa trình duyệt và Node.js. Viết trường hợp kiểm thử của bạn với
Buster.JSvà chạy nó cả trong Node.js và trong một trình duyệt thực.
Ghi màn hình: Buster.js Bắt đầu (2:45)
Ưu điểm:
- Sử dụng Node.js, nên tương thích với Win/OS X/Linux
- Chạy các bài kiểm tra từ trình duyệt hoặc không giao diện với PhantomJS (sắp tới)
- Chạy trên nhiều khách hàng cùng một lúc
- Hỗ trợ kiểm thử Node.js
- Không cần chạy máy chủ/khách trên máy tính phát triển (không cần IE)
- Chạy kiểm thử từ dòng lệnh (có thể tích hợp vào ant/maven)
- Viết các bài kiểm tra theo phong cách xUnit hoặc BDD
- Hỗ trợ nhiều khuôn khổ kiểm thử JavaScript
- Hoãn các bài kiểm tra thay vì chú thích chúng
- SinonJS tích hợp sẵn
- Tự động chạy kiểm tra khi lưu
- Yêu cầu proxy qua miền
Có thể tùy chỉnh:
- Mở rộng nó để bao quát các framework kiểm thử khác (JsTestDriver đã được tích hợp)
- Những khẳng định/bác bỏ của chính bạn
- Báo cáo viên (xUnit XML, chấm truyền thống, specification, tap, TeamCity và nhiều hơn nữa được tích hợp sẵn)
- Tùy chỉnh/thay thế HTML được sử dụng để chạy các bài kiểm tra trình duyệt
Nhược điểm:
- Vẫn đang ở beta nên có thể bị lỗi
- Chưa có plugin cho Eclipse/IntelliJ
- Không nhóm kết quả theo hệ điều hành/trình duyệt/phiên bản như TestSwarm *. Tuy nhiên, nó in ra tên trình duyệt và phiên bản trong kết quả kiểm tra.
- Không có lịch sử kết quả kiểm tra trước đây như TestSwarm *
- Không hoạt động đầy đủ trên Windows tính đến tháng 5 năm 2014
* 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ó xuất ra các báo cáo xUnit XML, vì vậy việc tích hợp với Hudson, Bamboo hoặc các máy chủ CI khác nên dễ dàng.
TestSwarm
https://github.com/jquery/testswarm
TestSwarm chính thức không còn được phát triển tích cực nữa như đã nêu trên trang GitHub của họ. Họ khuyên dùng Karma, browserstack-runner hoặc Intern.
Nhài
Đây là một framework dựa trên hành vi (như đã nêu trong trích dẫn bên dưới) mà có thể thu hút những nhà phát triển quen thuộc với Ruby hoặc Ruby on Rails. Cú pháp được dựa trên RSpec được sử dụng cho việc kiểm thử trong các dự án Rails.
Các bản kiểm tra Jasmine có thể được chạy từ một trang HTML (theo kiểu qUnit) hoặc từ một trình chạy kiểm tra (như Karma).
Jasmine là một framework phát triển hướng hành vi để kiểm thử mã JavaScript của bạn. Nó không phụ thuộc vào bất kỳ framework JavaScript nào khác. Nó không yêu cầu DOM.
Nếu bạn có kinh nghiệm với khung kiểm thử này, vui lòng đóng góp thêm thông tin :)
Trang chủ dự án: http://jasmine.github.io/
QUnit
QUnit tập trung vào việc kiểm tra JavaScript trên trình duyệt trong khi cung cấp càng nhiều tiện lợi cho nhà phát triển càng tốt. Mô tả từ trang web:
QUnit là một bộ kiểm thử đơn vị JavaScript mạnh mẽ và 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 thử 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ó không gian riêng, tên gọi và tài liệu API riêng, cho phép người khác cũng sử dụng nó cho việc kiểm thử đơn vị của họ. Vào thời điểm đó nó vẫn phụ thuộc vào jQuery. Một lần viết lại vào năm 2009 đã khắc phục điều đó, 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 đặc tả Kiểm thử Đơn vị CommonJS, một phần nào đó đã được QUnit ảnh hưởng.
Trang chủ dự án: http://qunitjs.com/
Sinon
Một công cụ tuyệt vời khác là sinon.js của Christian Johansen, tác giả của Test-Driven JavaScript Development. Được chính ông ấy mô tả tốt nhất:
Các spy, stub và mock độc lập cho JavaScript. Không có phụ thuộc, hoạt động với bất kỳ framework kiểm thử đơn vị nào.
Thực tập sinh
Trang web Intern cung cấp một so sánh tính năng trực tiếp với các framework kiểm thử khác trong danh sách này. Nó cung cấp nhiều tính năng hơn ngay từ đầu so với bất kỳ hệ thống kiểm thử dựa trên JavaScript nào khác.
Trò đùa
Một framework kiểm thử mới nhưng rất mạnh mẽ. Nó cho phép kiểm thử dựa trên ảnh chụp nhanh, điều này cũng làm tăng tốc độ kiểm thử và tạo ra một động lực mới về mặt kiểm thử
Xem một buổi nói chuyện của họ tại: https://www.youtube.com/watch?v=cAKYQpTC7MA
Tốt hơn nữa: Bắt đầu
Câu trả lời #2
Hãy xem xét khung test đơn vị Dojo Object Harness (DOH), vốn là một khung thử nghiệm đơn vị độc lập với framework cho JavaScript và không có bất kỳ phụ thuộc nào vào Dojo. Có một mô tả rất tốt về nó trong bài Unit testing Web 2.0 applications using the Dojo Objective Harness.
Nếu bạn muốn tự động hóa việc kiểm thử giao diện người dùng (một điểm đau của nhiều nhà phát triển) — hãy xem qua doh.robot (tạm thời không khả dụ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 không khả dụng). Cái sau được thiết kế cho kiểm thử chấp nhận. Cập nhật:
Các bài báo tham khảo giải thích cách sử dụng chúng, cách mô phỏng một 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 một phiên kiểm thử, để bạn có thể "phát lại" nó tự động sau.
Câu trả lời #3
Chutzpah - Trình Chạy Kiểm Thử JavaScript
Tôi đã tạo một dự án mã nguồn mở có tên là Chutzpah, đây là một trình chạy kiểm thử cho các bài kiểm thử đơn vị JavaScript. Chutzpah cho phép bạn chạy các bài kiểm thử đơn vị JavaScript từ dòng lệnh và từ bên trong Visual Studio. Nó cũng hỗ trợ chạy trên máy chủ tích hợp liên tục TeamCity.
Câu trả lời #4
Phần JavaScript trong mục Wikipedia, Danh sách các Khung Kiểm thử Đơn vị, cung cấp một danh sách các lựa chọn có sẵn. Nó chỉ ra liệu chúng hoạt động phía client, phía server, hay cả hai.
Câu trả lời số 5
BusterJS
Cũng có BusterJS từ Christian Johansen, tác giả của Test Driven Javascript Development và framework Sinon. Từ trang web:
Buster.JS là một framework kiểm thử JavaScript mới. Nó thực hiện kiểm thử trình duyệt bằng cách tự động chạy các bài kiểm thử trong các trình duyệt thực tế (nghĩ đến JsTestDriver), cũng như kiểm thử Node.js.
Câu trả lời số 6
google-js-test:
Framework kiểm thử JavaScript được phát hành bởi Google: https://github.com/google/gjstest
- Thời gian khởi động và thực thi kiểm tra cực nhanh, mà không cần phải chạy trình duyệt.
- Đầu ra sạch, dễ đọc trong cả trường hợp kiểm tra thành công và thất bại.
- Một trình chạy thử dựa trên trình duyệt có thể đơn giản được làm mới bất cứ khi nào JS được thay đổi.
- Phong cách và ngữ nghĩa giống với Google Test cho C++.
- Một framework giả lập tích hợp sẵn yêu cầu mã khung tối thiểu (ví dụ: không cần
$tearDownhoặc$verifyAll) với phong cách và ngữ nghĩa dựa trên Google C++ Mocking Framework.
Hiện tại không có tệp nhị phân nào cho Windows

