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

Javascript 如何使用Jasmine在Angular中模拟$window.location.href,javascript,angularjs,jasmine,Javascript,Angularjs,Jasmine,我有一个Angular中的工厂,它包含一个函数,该函数需要一个字符串作为参数,检查该字符串是否设置为URL中的Get参数,如果设置了,则返回该参数的值 该函数在某种伪代码中的简化版本如下所示 函数getParameterValueByName(parameterName){ url=$window.location.href; 如果(参数名称在url中){ 从parameterName返回值; } }实现这一点的方法有很多,但我认为最好的方法是为窗户本身建造一个小型工厂: function g

我有一个Angular中的工厂,它包含一个函数,该函数需要一个字符串作为参数,检查该字符串是否设置为URL中的Get参数,如果设置了,则返回该参数的值

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

函数getParameterValueByName(parameterName){ url=$window.location.href; 如果(参数名称在url中){ 从parameterName返回值; }
}实现这一点的方法有很多,但我认为最好的方法是为窗户本身建造一个小型工厂:

function getParameterValueByName(parameterName) {

  url = getWindow().location.href

  if (parameterName is in url) {

    return THE VALUE FROM parameterName;

  }

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

}
当嘲笑它时:

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

}

创建一个对象
$window
并添加
位置
属性,然后将
href
属性添加到
位置
。您的代码只获得一个值,所以您只需要确保它存在。然后,您可以将该值设置为测试函数所需的任何值。我不知道我是否理解正确,但如果我只是按照您的建议创建一个对象,Jasmine在函数内部仍将使用运行Karma的localhost URL。您能更准确地说吗?我必须在哪里添加此模拟?我还认为
url=getWindow().location.href
应该是
url=getWindow()