如何模拟链接的下载属性

How to mock download attribute of a link?

本文关键字:链接 下载 属性 模拟 何模拟      更新时间:2023-09-26

我正在努力将应用程序从 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设置为未定义时,它仍然进入第一个分支。 如果我尝试只传递一个空对象,我会出错,因为各种属性都是未定义的,即使代码似乎没有查看这些属性。

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

如何将下载属性设置为未定义?

这是一个带有该问题的简单 Plunker。

设置为

download 的值将转换为字符串值,因此您的undefined将转换为 "undefined"这就是为什么它始终通过!==比较的原因。

编辑

通过您的评论,您想对download进行功能检测。所以要这样做使用

`download` in createElement('a')
//or
HTMLAnchorElement.prototype.hasOwnProperty('download')

然后,如果您想强制进行不存在的测试,您可以从原型中删除download

delete HTMLAnchorElement.prototype.download;