2013-01-01 10 views
5

Tarayıcı gezinmesini destekleyen bir kütüphane yazıyorum history.pushState ve ayrıca gezinme tarayıcıda gerçekleştiğinde iletişim kurar popstate event yakalar. Bu kütüphane için Jasmine testleri yazmaya çalıştığım için, history.pushState ile nasıl dalga geçebileceğimi ve windowpopstate sinyalinin emisyonunu nasıl taklit edebileceğimi merak ediyorum? Aşağıdaki kod parçacıkları sorununu aydınlatmak olmalıdır:Jasmine - history.pushState ile aynı zamanda sahte olay emisyonunu nasıl taklit edebilirim?

Kütüphane kodu:

var lib = (function() { 
    function navigate(path) { 
     history.pushState(null, null, path); 
    } 

    function onPopState(event) { 
     if (lib.callback) { 
      lib.callback(document.location); 
     } 
    } 

    $(window).bind('popstate', onPopState); 

    return { 
     navigate: navigate 
    }; 
})(); 

Testi kodu (Yasemin): Temel olarak

describe("Test navigate", function() { 
    it("Should invoke callback upon state change", function() { 
     var invokedWith; 
     function callback(url) { 
      invokedWith = url; 
     } 
     lib.callback = callback; 
     lib.navigate('/path'); 
     // Doesn't work, callback invoked asynchronously 
     expect(invokedWith).toEqual('/path'); 
    }); 
}); 

, ben history.pushState işlevini alay ve sahte popstate yayarlar istiyorum 'un lib numaralı telefondaki kullanımını test etmek için window'dan olay.

Ayrıca "çalışma" kodu için benim fiddle'a bakın.

cevap

2

Böyle history.pushState gizlice izleyebilir: etkinliği bağlamak için jquery kullanıldıkça sadece kendiniz popstate tetikleyebilir

spyOn(history, 'pushState'); 

.

$(window).trigger('popstate') 
İlgili konular