如何删除用于单元测试的窗口/导航器JS API?

时间:2016-07-22 00:40:11

标签: javascript testing web

我想在浏览器中不存在API时测试库的行为。

例如,如果我有以下检查:

if ('serviceWorker' in navigator &&
'PushManager' in window &&
'Notification' in window &&
'showNotification' in ServiceWorkerRegistration.prototype) {
   // Do something
} else {
   throw new Error('Catch in test');
}

是否可以完全删除这些全局范围的属性?

1 个答案:

答案 0 :(得分:0)

  

是否可以完全删除这些全局范围的属性?

据我所知。一种解决方案是使代码独立于全局范围。

包装此功能检查将这些对象基元作为参数的函数,然后在测试中模拟它们。



function initServiceWorker(window, navigator) {
  if ('serviceWorker' in navigator &&
    'PushManager' in window &&
    'Notification' in window &&
    'showNotification' in ServiceWorkerRegistration.prototype) {
    // Do something
  } else {
    throw new Error('Catch in test');
  }
}

initServiceWorker(window, navigator)
alert("first test passed")
initServiceWorker(window, {})