2011-11-18 8 views
15

tôi có mã jQuery rằng khi tôi bấm vào một liên kết nó da đầu tiên và sau đó loại bỏ một số HTML, như vậy:chờ QUnit kiểm tra

$(this).parent().parent().hide('slow', function() { 
    $(this).remove(); 
}); 

Tôi muốn thực hiện một thử nghiệm QUnit mà làm cho chắc chắn rằng mã HTML trong câu hỏi đã bị xóa:

$(thelink).click(); 

// Check that it is gone, by finding the first item in the list 
entity = input.form.find('.recurrenceinput_occurrences .occurrence span.action a')[0]; 
// And make sure it's NOT the deleted one: 
ok(entity.attributes.date.value !== "20110413T000000"); 

vấn đề là tất nhiên rằng() kiểm tra ok đang chạy trước khi ẩn hình ảnh động đã chạy đến một kết thúc, do đó HTML offenting chưa được gỡ bỏ bài viết nào, và thử nghiệm thất bại .

Tôi đã thử nhiều cách khác nhau để trì hoãn/dừng thử nghiệm trong một giây hoặc lâu hơn, nhưng không có gì có vẻ hiệu quả. Cách rõ ràng nhất là sử dụng asynTest và làm

stop(); 
setTimeout(start, 2000); 

Nhưng điều này không thực sự dừng thử nghiệm. Dường như dừng lại điều gì đó trong hai giây, nhưng tôi không chắc chắn về điều gì. :-)

Bất kỳ ý tưởng nào?

Trả lời

21

Kiểm tra của bạn sẽ trông giống như thế này.

test('asynchronous test', function() { 
    stop(); // Pause the test 
    //Add your wait 
    setTimeout(function() { 
     //Make assertion 
     ok(true); 
     // After the assertion called, restart the test 
     start(); 
    }, 1000); 
}); 
+0

Bingo! Đó là thứ tự đúng đắn. :-) Vì vậy, dừng() thực sự chỉ dừng thử nghiệm từ kết thúc? –

+1

Cách tiếp cận này không được chấp nhận nữa (http://qunitjs.com/upgrade-guide-2.x/#replace-stop-and-start-with-assert-async). Câu trả lời của @ ekcrisp sử dụng cách tiếp cận mới. – Joe

+0

Điều ngạc nhiên khi một thứ được hỏi 6 năm trước bị phản đối. lol – epascarello

5

Bạn có thể sử dụng chức năng promise để kích hoạt gọi lại khi tất cả hoạt ảnh cho một phần tử được hoàn tất. Điều này ngụ ý rằng bạn cần phải biết những yếu tố nào mà hoạt ảnh được chạy trong bài kiểm tra (nhưng bạn không cần biết hoạt ảnh là bao lâu).

+0

Đó là một ý tưởng thú vị, nhưng tôi bị kẹt trên jQuery 1.4 vào lúc này, vì vậy không thể làm được. –

4

sử dụng các đối tượng khẳng định QUnit bạn có thể làm

test("async test", function (assert) { 
    var done = assert.async(); 
    setTimeout(function() { 
      delayedPartOfTest(); 
      done(); 
     }, 20000); 
    }) 

});