मैं एक पुस्तकालय लिख रहा हूं जो 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 देखें।