我有以下功能
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 举报,一经查实,本站将立刻删除。