SORU
11 Ocak 2011, Salı


Nasıl Yasemin ile jQuery AJAX olayları doğrulamak mı?

Yasemin temel jQuery AJAX istekleri için bazı BDD görüşler yazmak için kullanmaya çalışıyorum. Şu anda bağımsız mod (SpecRunner.html yani) Yasemin kullanıyorum. Yük bir WordPress kullanmak için SpecRunner ve diğer yapılandırılmış .js dosyaları. Aşağıdaki çalışmıyor neden herhangi bir fikir? has_returned true, "yuppi!" gösterileri kadar güzel bir uyarı. bu düşünce bile olmaz

describe("A jQuery ajax request should be able to fetch...", function() {

  it("an XML file from the filesystem", function() {
    $.ajax_get_xml_request = { has_returned : false };  
    // initiating the AJAX request
    $.ajax({ type: "GET", url: "addressbook_files/addressbookxml.xml", dataType: "xml",
             success: function(xml) { alert("yuppi!"); $.ajax_get_xml_request.has_returned = true; } }); 
    // waiting for has_returned to become true (timeout: 3s)
    waitsFor(function() { $.ajax_get_xml_request.has_returned; }, "the JQuery AJAX GET to return", 3000);
    // TODO: other tests might check size of XML file, whether it is valid XML
    expect($.ajax_get_xml_request.has_returned).toEqual(true);
  }); 

});

Nasıl geri çağrıldı test edebilirim? Yasemin/malzeme uyumsuz bir WordPress kullanmak test ile ilgili bloglar için herhangi bir işaretçiler büyük takdir edilecektir.

CEVAP
1 HAZİRAN 2011, ÇARŞAMBA


Yapabileceğiniz testler iki türü vardır sanırım

  1. Birim AJAX sahte isteği (Yasemin casusları kullanarak), çalışan tüm kodunuzu test etmek için sağlayan testlerdaha önce sadeceAJAX isteği vesadece daha sonra. Hatta sunucudan sahte bir yanıt Yasemin kullanabilirsiniz. Bu testler daha hızlı olur ve gerçek bir AJAX oluyor olmadığı zaman uyumsuz davranışları işlemek gerekir.
  2. Entegrasyon gerçek AJAX isteklerini gerçekleştirmek testleri. Bu zaman uyumsuz olması gerekir.

Yasemin seni testleri de yaparlar yardımcı olabilir.

Burada doğru URL AJAX isteği sahte, ve sahte AJAX isteği olduğunu doğrulamak için bir birim test yazmak için nasıl bir örnek:

it("should make an AJAX request to the correct URL", function() {
    spyOn($, "ajax");
    getProduct(123);
    expect($.ajax.mostRecentCall.args[0]["url"]).toEqual("/products/123");
});

function getProduct(id) {
    $.ajax({
        type: "GET",
        url: "/products/"   id,
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    });
}

İçinYasemin 2.0yerine kullanın:

expect($.ajax.calls.mostRecent().args[0]["url"]).toEqual("/products/123");

this answer belirtildiği gibi

İşte geri çağırma bir AJAX isteği başarıyla tamamladıktan sonra infaz edildi doğrulayan benzer bir birim test:

it("should execute the callback function on success", function () {
    spyOn($, "ajax").andCallFake(function(options) {
        options.success();
    });
    var callback = jasmine.createSpy();
    getProduct(123, callback);
    expect(callback).toHaveBeenCalled();
});

function getProduct(id, callback) {
    $.ajax({
        type: "GET",
        url: "/products/"   id,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: callback
    });
}

İçinYasemin 2.0yerine kullanın:

spyOn($, "ajax").and.callFake(function(options) {

this answer belirtildiği gibi

Son olarak, gerçek AJAX istekleri entegrasyonu amaçlar için entegrasyon testleri yazmak isteyebileceğiniz başka bir ima var. Bu işi Jasmine'in asyncronous özelliklerini kullanarak olabilir:) bekler, waitsFor() çalışan():

it("should make a real AJAX request", function () {
    var callback = jasmine.createSpy();
    getProduct(123, callback);
    waitsFor(function() {
        return callback.callCount > 0;
    });
    runs(function() {
        expect(callback).toHaveBeenCalled();
    });
});

function getProduct(id, callback) {
    $.ajax({
        type: "GET",
        url: "data.json",
        contentType: "application/json; charset=utf-8"
        dataType: "json",
        success: callback
    });
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bunnyboxx

    bunnyboxx

    17 NİSAN 2008
  • JamesAtiPhone

    JamesAtiPhon

    16 EYLÜL 2010
  • Mismag822 - The Card Trick Teacher

    Mismag822 -

    18 EKİM 2008