2016-02-12 78 views
3

可以說我們有一個帶有jQuery驗證的表單。現在我們創建一個簡單的Jasmine規範,並且想要測試如果我們提交一個空表單時錯誤消息是否可見。茉莉花等到功能完成後的HTML渲染

我的第一步是觸發提交表單事件後,jquery驗證將工作並顯示錯誤消息。直到錯誤信息顯示的時間窗口非常小(2毫秒),但對於茉莉花測試來說太大了。目前用的setTimeout()它的工作原理,但我認爲這是一個不錯的方法:(

我新的茉莉花,我認爲必須有一個更好的方式與東西間諜

假人規範例如?: 。

describe("Lorem Impsum: ", function() { 
it("Form validation shows error messages.", function() { 
    $("#MyForm").submit(); 
    expect($(".error")).toBeVisible(); 
    }); 
}); 

回答

0

使用setTimeoutsetInterval輪詢可能不是一個壞的方式如果頁面是複雜的,定期的檢查更簡單,比使用MutationObserver(這是一個單元測試;而不是應用程序),如果您選擇輪詢間隔足夠短,測試不會太慢。例如:

describe("Lorem Impsum: ", function() { 
    it("Form validation shows error messages.", function (done) { 
    $("#MyForm").submit(); 
    waitForElement(".error", function() { 
     expect($(".error")).toBeVisible(); 
     done(); 
    }); 
    }); 
}); 

function waitForElement(selector, callback) { 
    var interval; 
    if ($(selector).length) { 
    callback(); 
    } else { 
    interval = setInterval(function() { 
     if ($(selector).length) { 
     clearInterval(interval); 
     callback(); 
     } 
    }, 10); 
    } 
} 

您需要聲明並調用done回調函數,以便Jasmine在測試規範完成時得到通知。