javascript - 在 Javascript 中模拟 window.location.href

标签 javascript mocking jasmine

我对一个使用 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/

相关文章:

angular - Jasmine Angular 测试有时通过有时不通过,具体取决于 Describe 前缀

javascript - 单元测试 $(document).on

javascript - 检查数组是否包含来自另一个数组的元素

javascript - 在 Bootstrap 中创建一个固定到底部的导航栏,在切换时向上滑动内容

ruby-on-rails - Rails : How to mock gems, 如 fb_graph

testing - 我什么时候应该通过手动创建 "stub"版本而不是使用模拟框架来 stub 类型

go - 使用 go-mocket 模拟 GORM 数据库不起作用

javascript - 在 React 应用程序中更新动态渲染元素时出现问题

javascript - 基本的javascript华氏/摄氏计算器

angularjs - Angular jqLit​​e : . find() 不起作用 - 不选择标签