1

У меня возникли проблемы с получением моего покрытия кода до 100% из-за того, что уведомление W3C не доступно для PhantomJS. У меня есть следующие функции:W3C Уведомление о покрытии

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); 
}); 

, но все, что я делаю, состояние покрытия функции еще остается на уровне 2/4 (что имеет смысл, но Я должен выполнить проверку на поддержку кросс-браузера). Я использую следующие инструменты:

  • Карма + Jasmine для проведения испытаний
  • карма-покрытия для покрытия
  • PhantomJS как модульного тестирования браузера
  • Cobertura репортером
  • (Jenkins, как CI)

Как я могу получить функцию else для прохождения тестов покрытия кода?

ответ

1

Я решил эту проблему, используя обертку вокруг уведомлений, используя 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); 
}); 
Смежные вопросы