我正在编写一个在history.pushState的帮助下支持浏览器导航的库,并且还会捕获在浏览器中进行导航时进行通信的popstate event。当我正在尝试为此库编写Jasmine测试时,我想知道如何模仿history.pushState
并伪造来自popstate
的{{1}}信号的发射?以下代码片段应该阐明问题:
图书馆代码:
window
测试代码(Jasmine):
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
处理
另请参阅我的fiddle了解“工作”代码。
答案 0 :(得分:3)
你可以像这样窥探history.pushState
:
spyOn(history, 'pushState');
当您使用jquery绑定事件时,您可以自行触发popstate
。
$(window).trigger('popstate')