jquery – 在qUnit中测试整页重定向

我有以下功能
var redirect = function() {
    window.location.href = "http://www.google.com";
}

我想用qUnit测试这个函数.

问题是,当我调用运行测试的HTML文档时,只要它进入调用redirect()的测试,浏览器就会加载google.com.我想做的是以某种方式模拟window.location.href,以便它不重定向,所以我可以检查它是否设置为正确的值.

以一种更可测试的方式重写它将是一个可接受的答案,并受到欢迎.由于我使用的是qUnit,因此一些jQuery魔法是合适的,就像一些老式的重构一样.建议为window.location.href添加自定义setter,但我无法弄清楚如何使其工作.

请不要改变我的代码行为的建议.

解决方法

这是我最终解决它的方式. giggity.navOnChange是类似于原始问题中的重定向函数.

码:

var giggity = giggity || {};

$(document).ready(function() {
    $("#branches").change(giggity.navOnChange);
    $("#tags").change(giggity.navOnChange);
});

giggity.window = window;

giggity.navOnChange = function() {
    giggity.window.location.href = this.value;
};

测试代码

var giggity = giggity || {};

test("giggity.navOnChange",function() {
    var temp = giggity.window
    giggity.window = { location: {} };
    var mockSelect = {
        value: "/link/to/some/branch",onChange: giggity.navOnChange
    }
    mockSelect.onChange();
    equal(giggity.window.location.href,mockSelect.value);
    giggity.window = temp; // restore mocked variable
});

我正在使用giggity对象作为我的代码的命名空间.我将giggity.window变量指定为指向窗口,并通过giggity.window与窗口进行交互.这样,我可以轻松地模拟窗口对象的任何操作.我将giggity.window指向一个模拟对象,调用修改giggity.window的函数并检查mock的值.

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: <span id=&quot...
jQuery 添加水印 <script src="../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...