簡體   English   中英

qunit + mockjax:何時應在異步測試中調用mockjaxClear?

[英]qunit + mockjax: When should I call mockjaxClear in async tests?

我正在使用qunitmockjax測試我的前端代碼。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM