我在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'}});
}));
答案 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"
}
}
}