我有以下功能
var redirect = function() {
window.location.href = "http://www.google.com";
}
我想使用 qUnit 测试这个函数。
问题是,当我调用运行测试的 HTML 文档时,一旦它到达调用的测试redirect()
,浏览器加载 google.com。我想做的是以某种方式模拟 window.location.href ,这样它就不会重定向,这样我就可以检查它是否设置为正确的值。
以更可测试的方式重写它将是一个可以接受的答案并且受到欢迎。因为我使用的是 qUnit,所以一些 jQuery 魔法是合适的,就像一些老式的重构一样。建议为 window.location.href 添加自定义设置器,但我不知道如何让它工作。
请不要提出改变我的代码行为的建议。
这就是我最终解决它的方法。giggity.navOnChange
是类似于的函数redirect
在原来的问题中。
Code:
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
指向的变量window
,并与window
via giggity.window
。这样,我可以轻松模拟任何对window
目的。我指着giggity.window
对于模拟对象,调用修改的函数giggity.window
并检查模拟的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)