[英]qunit + mockjax: When should I call mockjaxClear in async tests?
我正在使用qunit和mockjax測試我的前端代碼。 在mockjax自己的測試代碼中 ,AJAX測試的結構如下所示( jsfiddle ):
var testURL = "/test/data",
testData = { a: 1, b: "c" };
asyncTest("AJAX response test", 1, function() {
$.mockjax({
url: testURL,
responseText : JSON.stringify(testData)
});
$.ajax({
url: testURL,
dataType: "json",
success: function(data) {
deepEqual(data, testData, 'AJAX response is OK');
},
complete: function() {
start();
}
});
$.mockjaxClear();
});
根據mockjax文檔 :
* $.mockjaxClear()
Removes all mockjax handlers.
我不明白的是為什么在$.ajax()
調用之后mockjaxClear
調用mockjaxClear
。 問題在於它是否進行某種清理,如文檔所述,該清理將在 AJAX響應到達之前運行(請參見此jsfiddle的控制台)。 對我來說,在complete
事件的處理程序中進行清理似乎更合乎邏輯。 誰能解釋給我,為什么在$.ajax()
之后再調用mockjaxClear更好?
如果看一下代碼,您會發現清理不會影響已經“運行”的調用。 它只是確保任何后續的$.ajax()
都將調用jQuery的原始方法,並清除其他內部狀態(但同樣,不影響已經掛起的“請求”)。
這可能有助於確保被測$.ajax()
調用僅發送一次(如果發送了更多調用,它們將失敗,此外,將再次調用start()
方法,並將錯誤報告給Qunit)。
也可能只是為了保持代碼干凈(回調處理程序中的內容更少)。
我認為您實際上$.mockjaxClear
在測試中的任何地方運行$.mockjaxClear
。 QUnit為模塊內運行的測試提供了生命周期掛鈎,在這種情況下,重要的是拆卸。
http://api.qunitjs.com/module/
使用它,您的代碼應該類似於
module( "myapi", {
teardown: function() {
$.mockjaxClear();
}
});
asyncTest( "sometest", function() {
// test definition
});
如果願意,您甚至可以將模擬設置移到setup
生命周期掛鈎中,以使您的實際測試代碼更緊湊,並且僅關注測試本身,而不關注設置/拆卸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.