我目前正在研究一个移动应用程序,我决定使用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