Javascript 茉莉花-我怎样才能模仿history.pushState和假事件发射?

Javascript 茉莉花-我怎样才能模仿history.pushState和假事件发射?,javascript,jquery,testing,mocking,jasmine,Javascript,Jquery,Testing,Mocking,Jasmine,我正在编写一个库,该库在的帮助下支持浏览器导航,并捕获在浏览器中进行导航时进行通信的。当我试图为这个库编写测试时,我想知道如何模拟历史.pushState,以及如何模拟窗口发出的popstate信号?以下代码片段应说明问题: 库代码: var lib = (function() { function navigate(path) { history.pushState(null, null, path); } function onPopState(ev

我正在编写一个库,该库在的帮助下支持浏览器导航,并捕获在浏览器中进行导航时进行通信的。当我试图为这个库编写测试时,我想知道如何模拟
历史.pushState
,以及如何模拟
窗口发出的
popstate
信号?以下代码片段应说明问题:

库代码:

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
    };
})();
测试代码(Jasmine):

基本上,我想模拟
history.pushState
函数,并从
窗口发出一个假的
popstate
事件,以便测试
lib
中的
popstate
处理


另请参见我的“工作”代码。

您可以监视
历史。pushState
如下:

spyOn(history, 'pushState');
使用jquery绑定事件时,您只需自己触发
popstate

$(window).trigger('popstate')
$(window).trigger('popstate')