用例是这样的:我想对页面中运行的代码进行单元测试(在浏览器、QUnit 或类似的东西中)。页面可以做的事情之一是导航到另一个页面。我无法捕捉到这个事件,因为:
- beforeunload 无法停止操作(因此第一次导航中断了我的测试)
- 尝试使用 getter 返回旧值和监视 setter 重新定义 window.location 或 window.location.href 也是被禁止的
我知道有一些安全原因不允许停止导航,但对于开发来说,这样做真的很有用。
有没有可能这样做(我无法直接控制测试运行程序,所以我不能只在 iframe 中加载代码并让它导航然后检查 iframe 的位置)?
编辑:更具体一点:我想测试,基于来自 facebook 的记录/连接状态(我使用来自 github 的 facebook-stub 来模拟 fb),是否在登录按钮上安装了正确的处理程序(说,$('#login-btn')
),通过单击将页面导航到 facebook oauth 对话框、服务器流(此处的详细信息并不重要)。
所以我希望能够做这种事情:
// set up fb mock to not be connected
fbAsyncInit(); // simulate the startup of app
$('#login-btn').click();
equal(document.location.href, "http://www.facebook.com/oauth/...", "OAuth dialog not started.");
但如果当然,没有实际的导航。如何进行测试?