我对一个使用 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 有测试 spy ,不仅可以模拟函数返回所需的值,还可以验证它是否被调用:
spyOn(mynamespace.util, 'getQueryStringParameterByName').andReturn("desc");
//...
expect(mynamespace.util.getQueryStringParameterByName).toHaveBeenCalledWith("sort");
关于javascript - 在 Javascript 中模拟 window.location.href,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4792281/