我目前正在研究一個移動應用程序,我決定使用JQuery Mobile來實現它。然而,由於它是一個官方應用程序,它需要我對它進行測試,並且我決定和我一起學習在學校處理的茉莉花。使用Jasmine,JQuery Mobile和異步AJAX請求的組合測試DOM
目前我有一個客戶端和服務器端使用AJAX($.getJSON
)請求進行通信。
當其中一個AJAX請求轉發到它的callback
方法時,它將調用Notification
類來實現帶有通知的div
。
我當時的問題是,它似乎總是當我使用下面的代碼工作:
window.setTimeout(function() {
var expectedResult = "error";
var result = $("#test .ui-content .contentContainer .notification").text();
expect(result).toEqual(expectedResult);
}, 4000);
然而,幾天後,我開始了新的模塊,並編輯這些值它繼續工作,因爲它的舊 - 非現有的代碼,這將是非常錯誤的。
所以我注意到這個單元測試從來沒有真正的工作。
所以我開始尋找替代方法,發現runs
和waitsFor
函數,但我似乎無法讓它們工作。
所以這裏是一個考驗:
it('should display an error when trying to add a new contact', function() {
runs(function() {
var contact = new Contact();
contact.addContact();
});
waitsFor(function() {
expect($("#test .ui-content .contentContainer .notification")).toBeVisible();
}, 5000);
var expectedResult = "asdf";
var result = $("#test .ui-content .contentContainer .notification").text();
expect(result).toEqual(expectedResult);
});
回調方法:
this.addContact_callback = function (data) {
$('#createContactForm')[0].reset();
$('.ui-dialog').dialog('close');
window.setTimeout(function() {
(new Contact()).retrieveContactList();
(new NotificationBox()).show(data.message[0], data.message[1]);
}, 250)
};
我的通知:
function NotificationBox() {
this.show = function (message, type) {
var activePage = $("body .ui-page-active").attr("id");
var create = "<div class='notification " + type + "'>" + message + "</div>";
$("#" + activePage + " .ui-content .contentContainer .notification").remove();
$("#" + activePage + " .ui-content .contentContainer").prepend(
$(create).hide().fadeIn('slow').delay(2500).fadeOut('slow', function() {
$(this).remove();
})
);
};
}
我希望有人能夠給我提供一個解決方案這個主要問題。
此致 Larssy1
這兩種方法都在那裏,檢查第二個代碼片段。由於我沒有答案,我目前正在重構我的代碼,它允許我不通過DOM檢查,而是通過返回的值。 – larssy1