fix(zone.js): fix zone for Jasmine 3.3. (#31497)
If zonejs is sent undefined callbacks it proceeds to attempt to call them, then fails, catches it own fail, rewrites the stack to hide the mistake, and reports a TypeError with a callstack unrelated to inputs. Throw early if the callback is undefined (as can happen if JS or any-ified TS calls zone invokeTask). Check for undefined onCommplete callback to zonejs jasmine wrapper. PR Close #31497
This commit is contained in:
parent
32aa18be78
commit
c4c340a7c4
|
@ -204,12 +204,14 @@
|
|||
(jasmine as any).QueueRunner = (function(_super) {
|
||||
__extends(ZoneQueueRunner, _super);
|
||||
function ZoneQueueRunner(attrs: QueueRunnerAttrs) {
|
||||
if (attrs.onComplete) {
|
||||
attrs.onComplete = (fn => () => {
|
||||
// All functions are done, clear the test zone.
|
||||
this.testProxyZone = null;
|
||||
this.testProxyZoneSpec = null;
|
||||
ambientZone.scheduleMicroTask('jasmine.onComplete', fn);
|
||||
})(attrs.onComplete);
|
||||
}
|
||||
|
||||
const nativeSetTimeout = _global[Zone.__symbol__('setTimeout')];
|
||||
const nativeClearTimeout = _global[Zone.__symbol__('clearTimeout')];
|
||||
|
|
|
@ -1217,6 +1217,9 @@ const Zone: ZoneType = (function(global: any) {
|
|||
this.data = options;
|
||||
this.scheduleFn = scheduleFn;
|
||||
this.cancelFn = cancelFn;
|
||||
if (!callback) {
|
||||
throw new Error('callback is not defined');
|
||||
}
|
||||
this.callback = callback;
|
||||
const self = this;
|
||||
// TODO: @JiaLiPassion options should have interface
|
||||
|
|
Loading…
Reference in New Issue