我在 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/