Sto scrivendo una libreria che supporta la navigazione del browser con l'aiuto di history.pushState e rileva anche lo popstate event che comunica quando la navigazione avviene nel browser. Mentre sto provando a scrivere i test Jasmine per questa libreria, mi chiedo come posso prendere in giro history.pushState
e anche falsificare l'emissione del segnale popstate
da window
? I seguenti frammenti di codice dovrebbero chiarire il problema:Jasmine - Come posso prendere in giro history.pushState e anche emissione di eventi falsi?
Code Library:
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
};
})();
Codice di prova (Jasmine):
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');
});
});
Fondamentalmente, voglio prendere in giro la funzione history.pushState
ed emettono un falso popstate
evento da window
, in modo da testare la gestione di popstate
in lib
.
Vedere anche il mio fiddle per codice "funzionante".