history.pushStateの助けを借りてブラウザー ナビゲーションをサポートし、ブラウザーでナビゲーションが行われたときに通信するpopstate イベントもキャッチするライブラリを作成しています。このライブラリのJasmineテストを作成しようとしているときhistory.pushState
に、? 次のコード スニペットは、問題を解明する必要があります。popstate
window
ライブラリ コード:
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
「動作する」コードについては、私のフィドルも参照してください。