我目前正在开发一个我决定使用 JQuery Mobile 实现的移动应用程序。但是,由于它将是一个官方应用程序,因此需要我对其进行测试,因此我决定使用我在学校学会处理的 Jasmine。
目前我有一个客户端和服务器端,它们使用 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
andwaitsFor
函数,但我似乎无法让它们工作。
所以这里是一个测试:
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