我对一个使用 window.location.href 的函数进行了一些单元测试——这并不理想,我宁愿将其传递进去,但在实现中这是不可能的。我只是想知道是否可以模拟这个值而不实际导致我的测试运行器页面实际转到该 URL。
window.location.href = "http://www.website.com?varName=foo";
expect(actions.paramToVar(test_Data)).toEqual("bar");
我使用 jasmine 作为我的单元测试框架。
最好的方法是在某处创建一个辅助函数,然后模拟它:
var mynamespace = mynamespace || {};
mynamespace.util = (function() {
function getWindowLocationHRef() {
return window.location.href;
}
return {
getWindowLocationHRef: getWindowLocationHRef
}
})();
现在,不必在代码中直接使用 window.location.href,只需使用它即可。然后,每当您需要返回模拟值时,您都可以替换此方法:
mynamespace.util.getWindowLocationHRef = function() {
return "http://mockhost/mockingpath"
};
如果您想要窗口位置的特定部分(例如查询字符串参数),那么也为此创建帮助器方法,并将解析排除在主代码之外。一些框架(例如 jasmine)具有测试间谍,它们不仅可以模拟函数以返回所需的值,还可以验证它是否被调用:
spyOn(mynamespace.util, 'getQueryStringParameterByName').andReturn("desc");
//...
expect(mynamespace.util.getQueryStringParameterByName).toHaveBeenCalledWith("sort");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)