7

history.pushStateの助けを借りてブラウザー ナビゲーションをサポートし、ブラウザーでナビゲーションが行われたときに通信するpopstate イベントもキャッチするライブラリを作成しています。このライブラリのJasmineテストを作成しようとしているときhistory.pushStateに、? 次のコード スニペットは、問題を解明する必要があります。popstatewindow

ライブラリ コード:

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をテストしたいと考えています。popstatelib

「動作する」コードについては、私のフィドルも参照してください。

4

1 に答える 1

3

history.pushState次のようにスパイできます。

spyOn(history, 'pushState');

jquery を使用してイベントをバインドするとpopstate、自分で簡単にトリガーできます。

$(window).trigger('popstate')
于 2013-01-01T22:43:41.067 に答える