Javascript 如何模拟链接的下载属性?
我正在将一个应用程序从Angular 1.2升级到Angular 1.4,在此过程中,我打破了一些业力测试。大多数都是简单的修复方法,但也有一些我无法使用。测试依赖于检查是否定义了下载属性来确定如何下载所需的文件。在升级之前,测试可以设置elem.download。升级后,我似乎无法设置下载 以下是我如何为测试设置元素: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
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中起作用,所以现在我只需要让它在测试中起作用:)你能更新你的答案,我会把它标记为正确的吗?