如何模拟 link 的下载属性?

How to mock download attribute of a link?

我正在努力将应用程序从 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

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

这是一个 simple Plunker 问题。

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

编辑

根据您的意见,您想对 download 进行特征检测。所以要做到这一点使用

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

然后如果你想强制一个不存在的测试你可以从原型中删除 download

delete HTMLAnchorElement.prototype.download;