Added jasmine.spyOnGlobalErrorsAsync

* Allows testing code that's expected to prodeuce global errors or
  unhandled promise rejections
* Fixes #1843
* Fixes #1453
This commit is contained in:
Steve Gravrock
2022-06-30 18:09:56 -07:00
parent d0a9931ae6
commit 6c56ebc984
11 changed files with 884 additions and 109 deletions

View File

@@ -1,9 +1,17 @@
getJasmineRequireObj().GlobalErrors = function(j$) {
function GlobalErrors(global) {
const handlers = [];
global = global || j$.getGlobal();
const onerror = function onerror() {
const handlers = [];
let overrideHandler = null,
onRemoveOverrideHandler = null;
function onerror(message, source, lineno, colno, error) {
if (overrideHandler) {
overrideHandler(error || message);
return;
}
const handler = handlers[handlers.length - 1];
if (handler) {
@@ -11,7 +19,7 @@ getJasmineRequireObj().GlobalErrors = function(j$) {
} else {
throw arguments[0];
}
};
}
this.originalHandlers = {};
this.jasmineHandlers = {};
@@ -42,6 +50,11 @@ getJasmineRequireObj().GlobalErrors = function(j$) {
const handler = handlers[handlers.length - 1];
if (overrideHandler) {
overrideHandler(error);
return;
}
if (handler) {
handler(error);
} else {
@@ -126,6 +139,24 @@ getJasmineRequireObj().GlobalErrors = function(j$) {
handlers.pop();
};
this.setOverrideListener = function(listener, onRemove) {
if (overrideHandler) {
throw new Error("Can't set more than one override listener at a time");
}
overrideHandler = listener;
onRemoveOverrideHandler = onRemove;
};
this.removeOverrideListener = function() {
if (onRemoveOverrideHandler) {
onRemoveOverrideHandler();
}
overrideHandler = null;
onRemoveOverrideHandler = null;
};
}
return GlobalErrors;