私はhistory.pushStateの助けを借りてブラウザのナビゲーションをサポートするライブラリを作成しており、ブラウザでナビゲーションが行われるときに通信するpopstate eventもキャッチしています。私はこのライブラリのためにJasmineのテストを書こうとしているので、私はwindow
からpopstate
シグナルの放出を擬似することができますか?history.pushState
をどうやって模倣できるのでしょうか?次のコードスニペットは、問題を解明する必要がありますジャスミン - どのように私はhistory.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
からpopstate
ハンドリングをlib
でテストします。
「作業中」のコードについては、fiddleも参照してください。