私は現在、JQuery Mobile を使用して実現することにしたモバイル アプリケーションに取り組んでいます。ただし、公式アプリなのでテストする必要があり、学校で対処法を学んだ Jasmine を使用することにしました。
$.getJSON
現在、AJAX ( ) 要求を使用して通信するクライアント側とサーバー側の両方があります。
これらの AJAX リクエストの 1 つがその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