W3C 通知范围

W3C Notification Coverage

由于 PhantomJS 无法使用 W3C 通知,我无法将代码覆盖率提高到 100%。我有以下功能:

function requirespermission(overwrite){
    if(overwrite || (typeof Notification !== 'undefined' && Notification.permission === 'granted'))
    {
        return true; 
    }
    else if(!overwrite || typeof Notification !== 'undefined'){
        Notification.requestPermission();
    }
    return false;
}

我的测试如下:

it('should be able to get permission', function(){
    notificationservice.requirespermission(true);
});

it('should be able to not get permission', function(){
    notificationservice.requirespermission(false);
});

但无论我做什么,else 函数的条件覆盖率都保持在 2/4(这是有道理的,但我必须实施跨浏览器支持检查)。我使用以下工具:

如何让else函数通过代码覆盖率测试?

我通过使用 Notify.js 在通知周围使用包装器解决了这个问题。现在的代码是:

function requirespermission(overwrite){
    if(!Notify.needsPermission || overwrite)
    {
        return true; 
    }
    else if(Notify.isSupported()){  
        Notify.requestPermission();
    }
    return false;
}

和测试:

it('should be able to not get permission', function(){
    notificationservice.requirespermission(true);
});

it('should be able to not get permission', function(){
    spyOn(Notify, 'isSupported').and.returnValue(true);
    notificationservice.requirespermission(false);
});

it('should handle not-supported', function(){
    spyOn(Notify, 'isSupported').and.returnValue(false);
    notificationservice.requirespermission(false);
});