2013-01-01 20 views
5

मैं एक पुस्तकालय लिख रहा हूं जो history.pushState की सहायता से ब्राउज़र नेविगेशन का समर्थन करता है और popstate event भी पकड़ता है जो ब्राउज़र में नेविगेशन होने पर संचार करता है। चूंकि मैं इस पुस्तकालय के लिए Jasmine परीक्षण लिखने की कोशिश कर रहा हूं, मैं सोच रहा हूं कि मैं history.pushState कैसे नकल कर सकता हूं और window से popstate सिग्नल का उत्सर्जन भी नकली कर सकता हूं? निम्नलिखित कोड के टुकड़े समस्या स्पष्ट करना चाहिए:जैस्मीन - मैं इतिहास कैसे बना सकता हूं.pushState और नकली घटना उत्सर्जन भी?

लाइब्रेरी कोड:

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 
    }; 
})(); 

टेस्ट कोड (जैस्मीन):

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'); 
    }); 
}); 

असल में, मैं history.pushState समारोह नकली और फर्जी popstate फेंकना चाहता हूँ window से ईवेंट, ताकि lib में हैंडलिंग का परीक्षण किया जा सके।

"काम करने" कोड के लिए भी मेरे fiddle देखें।

उत्तर

2

आप history.pushState इस तरह की जासूसी कर सकते हैं:

spyOn(history, 'pushState'); 

आप घटना बाध्य करने के लिए jQuery का उपयोग करते हैं तो आप बस अपने आप से popstate को गति प्रदान कर सकते हैं।

$(window).trigger('popstate')