2010-10-20 31 views
15

Giới thiệu về QUnit qua số netTuts.com tạo ra một trao đổi thú vị (không bao giờ giải quyết) về cách áp dụng các kiểm tra đơn vị đối với các hành động thao tác DOM. Các trích dẫn sau đây (Alex York) được cho là mấu chốt:Làm thế nào chúng ta có thể thực hiện các xét nghiệm đơn vị chống lại thao tác DOM?

Điều gì sẽ là tốt đẹp là nếu bạn có một chức năng như thế này:

chức năng add (a, b) {var result = a + b; $ (“input # ResultTestBox”). Val (kết quả);

Trong bài kiểm tra ở trên, tôi thích kiểm tra hai điều: bổ sung a và b và kết quả chính xác được đặt vào phần tử DOM. Tôi rất muốn kiểm tra điều thứ hai bằng cách cung cấp một số HTML giả. Khả thi?

Nhưng, như tôi đã nói ... chưa được giải quyết. Resolvable?

Trả lời

20

Phiên bản mới nhất của QUnit hỗ trợ phần tử #qunit-fixture cho phép bạn thêm HTML vào trang web QUnit.

Ví dụ, trong HTML của bạn:

<ol id="qunit-tests"></ol> 
<div id="qunit-fixture">test markup, will be hidden</div> 

và trong JavaScript:

$('<input id="ResultTestBox" type="text"/>').appendTo('#qunit-fixture'); 
var result = add(a, b); 

equals(result, $('input#ResultTestBox').val(), "testing result box value"); 
+0

Làm thế nào để kiểm tra đơn vị khi bạn đang thực sự dựa trên các thao tác dom thực? – Tushar

+2

@Tushar phụ thuộc vào 26 định nghĩa về thử nghiệm đơn vị bạn đang sử dụng. Miễn là các xét nghiệm có thể chạy độc lập với nhau, chúng là các xét nghiệm đơn vị theo một số định nghĩa. (chẳng hạn như trong cuốn sách "Thử nghiệm phát triển theo Ví dụ" của Kent Beck) – herman

0

Bạn có thể chạy chúng trong env.js, nếu bạn không muốn gặp rắc rối tạo sandboxes trang html cho tất cả các bài kiểm tra của bạn.

2

Chắc chắn những gì bạn thực sự là quan tâm là phương pháp val được gọi trên giá trị trả lại là $(“input#ResultTestBox”) — bạn không cần kiểm tra chức năng của chính phương thức jQuery. Tại sao không tiêm một thực hiện giả lập của đối tượng jQuery và thử nghiệm chống lại điều đó?

+0

Làm thế nào để bạn tạo các đối tượng jQuery giả lập mà không mất chính jQuery? Giống như ý tưởng nhưng gặp khó khăn khi hình dung cách bạn sẽ giả lập mã. – Sukima

+4

@ Sukima, bạn sẽ cấu trúc lại mã ban đầu của mình để đối tượng '$' được truyền vào như một tham số, và theo mặc định làm cho giá trị tham số đó là jQuery. Sau đó, trong bài kiểm tra đơn vị của bạn, bạn vượt qua trong đối tượng giả của bạn –

+0

Chế nhạo (ít nhất là đối với những thứ khác ngoài các cuộc gọi từ xa, truy vấn cơ sở dữ liệu ...) là một mùi mã. Nếu bạn có thể kiểm tra kết quả của cuộc gọi thay vì phản đối thực tế là chính cuộc gọi đó đã xảy ra, điều đó thường tốt hơn nhiều. – herman

Các vấn đề liên quan