微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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的值.

原文地址:https://www.jb51.cc/jquery/177162.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐