javascript - 如何使用 Jasmine 在 Angular 中模拟 $window.location.href

标签 javascript angularjs jasmine

我在 Angular 中有一个工厂,其中包含一个函数,该函数需要一个字符串作为参数,检查该字符串是否设置为 URL 中的获取参数,并返回该参数的值(如果设置)。

该函数的某种伪代码的真正简化版本如下所示

function getParameterValueByName(parameterName) {
  
  url = $window.location.href;
  
  if (parameterName is in url) {
    
    return THE VALUE FROM parameterName;
    
  }
  
}

在 Jasmine 中,我需要测试此函数针对不同 URL 返回的内容。我必须在 $window.location.href 中使用不同的值运行多个测试。但是如何模拟 $window.location.href

+++++

终于找到办法了。我只需要添加这个片段。每次我想更改此 URL 时,我只需创建一个新的描述 block 。

beforeEach(module('myApp', function ($provide) {
      $provide.value('$window', {location: {href: 'https://www.example.com?foo=bar&foo2=bar2'}});
}));

最佳答案

有很多方法可以实现这一点,但我认为最好的方法是为窗口本身创建一个小工厂:

function getParameterValueByName(parameterName) {

  url = getWindow().location.href

  if (parameterName is in url) {

    return THE VALUE FROM parameterName;

  }

function getWindow(){
 return $window.location.href;

}

当 mock 它时:

function getWindow(){ // in your test
 return {
     location:{
       href:"What ever mock href u want"
     }
  }

}

关于javascript - 如何使用 Jasmine 在 Angular 中模拟 $window.location.href,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44024641/

相关文章:

javascript - AngularJS 表单验证 : has-error not showing for ng-required fields

angularjs - 如何在 Jasmine 测试中测试 $scope.$on 事件?

javascript - 如何使用 Jasmine 测试 Angular 6 中包含在 ng-container 中的元素?

javascript - 我应该如何测试可观察对象抛出错误?

javascript - 如何更新 ng-template 中的值

javascript - 使用 Python 获取 DHCP 客户端列表

javascript - AngularJS 变量之间的绑定(bind)

javascript - 在列表中的嵌套 ng-repeat 中搜索过滤器并隐藏没有 child 的 parent

javascript - Angular/PrimeNg 中的 "See more text"

javascript - 如何在 Angular2 中创建对话服务