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

时间:2017-05-17 12:18:01

标签: javascript angularjs jasmine

我在Angular中有一个Factory,它包含一个需要字符串作为参数的函数,检查该字符串是否在URL中设置为Get Parameter并返回该参数的值(如果已设置)。

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

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时,我只需创建一个新的描述块。

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

1 个答案:

答案 0 :(得分:1)

有许多方法可以实现这一目标,但我说最好的方法是为窗户自己建一个小工厂:

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"
     }
  }

}