Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何模拟链接的下载属性?_Javascript_Angularjs_Karma Jasmine - Fatal编程技术网

Javascript 如何模拟链接的下载属性?

Javascript 如何模拟链接的下载属性?,javascript,angularjs,karma-jasmine,Javascript,Angularjs,Karma Jasmine,我正在将一个应用程序从Angular 1.2升级到Angular 1.4,在此过程中,我打破了一些业力测试。大多数都是简单的修复方法,但也有一些我无法使用。测试依赖于检查是否定义了下载属性来确定如何下载所需的文件。在升级之前,测试可以设置elem.download。升级后,我似乎无法设置下载 以下是我如何为测试设置元素: var link = document.createElement('a'); link.download = undefined; 然后在代码本身中,它是一个非常简单的 i

我正在将一个应用程序从Angular 1.2升级到Angular 1.4,在此过程中,我打破了一些业力测试。大多数都是简单的修复方法,但也有一些我无法使用。测试依赖于检查是否定义了下载属性来确定如何下载所需的文件。在升级之前,测试可以设置elem.download。升级后,我似乎无法设置下载

以下是我如何为测试设置元素:

var link = document.createElement('a');
link.download = undefined;
然后在代码本身中,它是一个非常简单的

if(link.download !== undefined) {
    //do stuff (this test works)
} else {
    //do other stuff (this test doesn't work)
}
当我尝试将link.download设置为undefined时,它仍将进入第一个分支。如果我尝试只传入一个空对象,我会出错,因为各种属性都未定义,即使代码似乎没有查看这些属性

我还尝试设置
link.download=null
并将if语句更改为使用
typeof

TL;DR如何将下载属性设置为未定义


这里有一个问题。

设置为
下载的值将被转换为字符串值,因此您的
未定义的
将被转换为
“未定义的”
,这就是它总是传递
的原因==比较

编辑

根据您的评论,您希望对
下载进行功能检测。因此,要使用

`download` in createElement('a')
//or
HTMLAnchorElement.prototype.hasOwnProperty('download')
然后,如果您想强制执行一个不存在的测试,您可以从原型中删除
下载

delete HTMLAnchorElement.prototype.download;

设置为
download
的值将转换为字符串值,因此您的
未定义的
将转换为
“未定义的”
,这就是它总是传递
的原因==比较

编辑

根据您的评论,您希望对
下载进行功能检测。因此,要使用

`download` in createElement('a')
//or
HTMLAnchorElement.prototype.hasOwnProperty('download')
然后,如果您想强制执行一个不存在的测试,您可以从原型中删除
下载

delete HTMLAnchorElement.prototype.download;

问题是,当您创建元素时,download已经设置为空字符串,因此如果我只是检查falsy,它将始终转到else@lucky.hooligan,那么您的测试并没有将
download
设置为从创建元素到测试元素的可用值。
download
在if语句的true分支中设置。代码更需要检查浏览器是否支持它。如果浏览器不支持它,那么它将不存在于创建的元素上,我们需要使用不同的方法下载文件。它可以在浏览器中正常运行,但为了测试另一个分支,我需要模拟
下载
@lucky.hooligan,对于功能检测,您可以在createElement('a')
htmlanchoreElement.prototype.hasOwnProperty(“下载”)
中使用
'download',要触发不存在测试,您需要从原型中删除它:
delete-htmlanchorement.prototype.download
谢谢!我忘了你可以检查这样的属性,我也不知道你可以从原型中删除这个属性。这在plunker中起作用,所以现在我只需要让它在测试中起作用:)你能更新你的答案吗,我会将它标记为正确的吗?问题是,当你创建元素时,download已经设置为空字符串,所以如果我只检查falsy,它将始终转到else@lucky.hooligan,那么您的测试并没有将
download
设置为从创建元素到测试元素的可用值。
download
在if语句的true分支中设置。代码更需要检查浏览器是否支持它。如果浏览器不支持它,那么它将不存在于创建的元素上,我们需要使用不同的方法下载文件。它可以在浏览器中正常运行,但为了测试另一个分支,我需要模拟
下载
@lucky.hooligan,对于功能检测,您可以在createElement('a')
htmlanchoreElement.prototype.hasOwnProperty(“下载”)
中使用
'download',要触发不存在测试,您需要从原型中删除它:
delete-htmlanchorement.prototype.download
谢谢!我忘了你可以检查这样的属性,我也不知道你可以从原型中删除这个属性。这在plunker中起作用,所以现在我只需要让它在测试中起作用:)你能更新你的答案,我会把它标记为正确的吗?