0
我剛剛寫了這個服務,提醒他們在關閉窗口時的未保存數據的用戶:測試一個服務反應到DOM事件
module.factory('autosaver',
['$rootScope', '$window', 'editor', 'doc', 'saveInterval', '$timeout',
function ($rootScope, $window, editor, doc, saveInterval, $timeout) {
var scope = $rootScope.$new(true);
scope.doc = doc;
scope.confirmOnLeave = function(e) {
var msg = "You have unsaved data.";
// For IE and Firefox
e = e || window.event;
if (e) {e.returnValue = msg;}
// For Chrome and Safari
return msg;
};
scope.$watch('doc.dirty', function (newValue, oldValue) {
if(newValue !== oldValue) {
newValue ? $window.addEventListener('beforeunload', scope.confirmOnLeave) : $window.removeEventListener('beforeunload', scope.confirmOnLeave);
}
});
return scope;
}]);
現在我想寫的規範。我無法弄清楚如何模擬beforeunload事件並且偵聽這個調用。 我試過這段代碼:
it('should listen to beforeunload event', inject(function ($window, autosaver) {
autosaver.confirmOnLeave = jasmine.createSpy('confirmOnLeave');
var evt = document.createEvent("beforeunloadEvents");
evt.initMouseEvent("beforeunload", true, true, $window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
$window.dispatchEvent(evt);
}));
但我得到這個錯誤:
NotSupportedError: NotSupportedError: DOM Exception 9
Error: The implementation did not support the requested type of object or operation.
感謝您的幫助。
很好的方式來實現,謝謝。現在我很掙扎,因爲現在在我的手錶功能中,新的價值總是等於舊價值。只有在測試時發生,確定在真實應用程序中。 我已經發布了一個plnkr來說明我的問題:http://plnkr.co/edit/BezAEM?p=preview –
強制$摘要 – jujule