Я все еще изучаю веревки, когда дело доходит до модульного тестирования с угловым. У меня есть угловая служба, которую я использую для создания уведомлений HTML5. Код похож на следующее:
(function() {
'use strict';
angular
.module('blah')
.factory('OffPageNotification', offPageNotificationFactory);
function offPageNotificationFactory($window) {
//Request permission for HTML5 notifications as soon as we can
if($window.Notification && $window.Notification.permission !== 'denied') {
$window.Notification.requestPermission(function (status) { });
}
function OffPageNotification() {
var self = Object.create(OffPageNotification.prototype);
self.visibleNotification = null;
return self;
}
OffPageNotification.prototype.startNotification = function (options) {
var self = this;
self.options = options;
if(self.options.showHtml5Notification && (!self.options.onlyShowIfPageIsHidden || $window.document.hidden)) {
if($window.Notification && $window.Notification.permission !== 'denied') {
self.visibleNotification = new $window.Notification('Notification', {
body: self.options.notificationText,
icon: self.options.notificationIcon
});
}
}
};
.
.
.
return new OffPageNotification();
}
})();
Я пытающегося писать тесты для этого, но я не уверен, как издеваются $ window.Notification, поэтому он может быть использован и как конструктор ...
self.visibleNotification = new $window.Notification(....)
, а также содержат свойства
if($window.Notification && $window.Notification.permission !== 'denied')
и методы ....
$window.Notification.requestPermission(
пример того, что я попытался это:
describe('startNotification', function() {
beforeEach(function() {
var mockNotification = function (title, options) {
this.title = title;
this.options = options;
this.requestPermission = sinon.stub();
};
mockNotification.prototype.permission = 'granted';
mockWindow = {
Notification: new mockNotification('blah', {}),
document: {hidden: true}
};
inject(function (_OffPageNotification_) {
OffPageNotification = _OffPageNotification_;
});
});
it('should display a html5 notification if the relevant value is true in the options, and permission has been granted', function(){
var options = {
showHtml5Notification: true,
onlyShowIfPageIsHidden: true
};
OffPageNotification.startNotification(options);
});
});
Я получаю сообщение об ошибке сказав «$ window.Notification не конструктор» с этой установкой, и я понимаю, почему (я передаю в конкретизированной версии mockNotification). Но если я устанавливаю mockWindow.Notification = mockNotification, тогда я получаю сообщение об ошибке при вызове requestPermission, так как это не определено.
Любая помощь приветствуется
Спасибо, получил это работает с вашей помощью – Neil