【问题标题】:How to test javascript code that calls window objects如何测试调用窗口对象的javascript代码
【发布时间】:2017-03-29 10:49:05
【问题描述】:

我有以下 JavaScript 代码:

if (Notification.permission !== 'granted') {
    return Notification.permission
} 

当我对一些使用它的代码运行 Mocha 测试时,测试失败:

ReferenceError:未定义通知

我认为我可以通过这样做来完成这项工作:

sinon.stub(Notification, 'permission')

但是,我仍然遇到同样的错误。

如何防止出现此错误?

【问题讨论】:

    标签: javascript testing sinon


    【解决方案1】:

    在运行Notification.permission 之前,您应该先测试Notification 是否存在。

    做到这一点的一种方法是替换...

    if (Notification.permission !== 'granted') {
        return Notification.permission
    } 
    

    ...用这个:

    if (typeof Notification !== typeof undefined && Notification.permission !== 'granted') {
        return Notification.permission
    } 
    

    【讨论】:

    • 这可行,但有没有办法从测试文件本身做到这一点?如果我有一个包含几十个这样的对象的文件,我真的必须用 100 次这样的检查来混淆实际的工作代码吗?我希望测试文件本身有一种方法可以说明每当调用 Notification.permission 时,要么忽略它,要么做其他事情。我认为模拟是为此而生的,但也许我误解了。
    • @Riina :您可以在测试文件中执行类似typeof window.Notification === typeof undefined ? window.Notification = {} : false; 的操作来创建一个空的Notification object。这也应该防止错误,但这是一个相当肮脏的技巧,有点违背了 IMO 测试错误的目的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 2021-05-11
    • 2020-08-07
    • 2011-10-04
    • 1970-01-01
    • 2014-01-06
    • 2011-07-26
    相关资源
    最近更新 更多