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

时间:2016-02-05 15:52:46

标签: javascript angularjs karma-jasmine

我正在努力将应用程序从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 如何将下载属性设置为undefined?

这是simple Plunker的问题。

1 个答案:

答案 0 :(得分:0)

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

修改

根据您的评论,您希望对download进行功能检测。所以要做到这一点

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

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

delete HTMLAnchorElement.prototype.download;