Merge branch '3.99' into 4.0

This commit is contained in:
Steve Gravrock
2021-07-24 09:25:19 -07:00
4 changed files with 135 additions and 32 deletions

View File

@@ -775,10 +775,11 @@ getJasmineRequireObj().Spec = function(j$) {
self.onException.apply(self, arguments);
},
onComplete: function() {
onComplete(
self.result.status === 'failed' &&
new j$.StopExecutionError('spec failed')
);
if (self.result.status === 'failed') {
onComplete(new j$.StopExecutionError('spec failed'));
} else {
onComplete();
}
},
userContext: this.userContext()
};
@@ -7495,6 +7496,12 @@ getJasmineRequireObj().QueueRunner = function(j$) {
self.fail(err);
}
self.errored = errored = true;
} else if (typeof err !== 'undefined' && !self.errored) {
self.deprecated(
'Any argument passed to a done callback will be treated as an ' +
'error in a future release. Call the done callback without ' +
"arguments if you don't want to trigger a spec failure."
);
}
function runNext() {
@@ -7600,7 +7607,12 @@ getJasmineRequireObj().QueueRunner = function(j$) {
this.clearStack(function() {
self.globalErrors.popListener(self.handleFinalError);
self.onComplete(self.errored && new StopExecutionError());
if (self.errored) {
self.onComplete(new StopExecutionError());
} else {
self.onComplete();
}
});
};

View File

@@ -149,31 +149,111 @@ describe('QueueRunner', function() {
expect(queueableFn2.fn).toHaveBeenCalled();
});
it('explicitly fails an async function when next is called with an Error and moves to the next function', function() {
var err = new Error('foo'),
queueableFn1 = {
fn: function(done) {
setTimeout(function() {
done(err);
}, 100);
}
},
queueableFn2 = { fn: jasmine.createSpy('fn2') },
failFn = jasmine.createSpy('fail'),
queueRunner = new jasmineUnderTest.QueueRunner({
queueableFns: [queueableFn1, queueableFn2],
fail: failFn
describe('When next is called with an argument', function() {
describe('that is an Error', function() {
it('explicitly fails and moves to the next function', function() {
var err = new Error('foo'),
queueableFn1 = {
fn: function(done) {
setTimeout(function() {
done(err);
}, 100);
}
},
queueableFn2 = { fn: jasmine.createSpy('fn2') },
failFn = jasmine.createSpy('fail'),
queueRunner = new jasmineUnderTest.QueueRunner({
queueableFns: [queueableFn1, queueableFn2],
fail: failFn
});
queueRunner.execute();
expect(failFn).not.toHaveBeenCalled();
expect(queueableFn2.fn).not.toHaveBeenCalled();
jasmine.clock().tick(100);
expect(failFn).toHaveBeenCalledWith(err);
expect(queueableFn2.fn).toHaveBeenCalled();
});
queueRunner.execute();
it('does not log a deprecation', function() {
var err = new Error('foo'),
queueableFn1 = {
fn: function(done) {
setTimeout(function() {
done(err);
}, 100);
}
},
deprecated = jasmine.createSpy('deprecated'),
queueRunner = new jasmineUnderTest.QueueRunner({
queueableFns: [queueableFn1],
deprecated: deprecated
});
expect(failFn).not.toHaveBeenCalled();
expect(queueableFn2.fn).not.toHaveBeenCalled();
queueRunner.execute();
jasmine.clock().tick(100);
jasmine.clock().tick(100);
expect(failFn).toHaveBeenCalledWith(err);
expect(queueableFn2.fn).toHaveBeenCalled();
expect(deprecated).not.toHaveBeenCalled();
});
});
describe('that is not an Error', function() {
it('logs a deprecation', function() {
var queueableFn1 = {
fn: function(done) {
setTimeout(function() {
done('not an Error');
}, 100);
}
},
deprecated = jasmine.createSpy('deprecated'),
queueRunner = new jasmineUnderTest.QueueRunner({
queueableFns: [queueableFn1],
deprecated: deprecated
});
queueRunner.execute();
jasmine.clock().tick(100);
expect(deprecated).toHaveBeenCalledWith(
'Any argument passed to a done callback will be treated as an ' +
'error in a future release. Call the done callback without ' +
"arguments if you don't want to trigger a spec failure."
);
});
it('moves to the next function without failing', function() {
var queueableFn1 = {
fn: function(done) {
setTimeout(function() {
done('not an Error');
}, 100);
}
},
queueableFn2 = { fn: jasmine.createSpy('fn2') },
failFn = jasmine.createSpy('fail'),
queueRunner = new jasmineUnderTest.QueueRunner({
queueableFns: [queueableFn1, queueableFn2],
fail: failFn,
deprecated: function() {}
});
queueRunner.execute();
expect(failFn).not.toHaveBeenCalled();
expect(queueableFn2.fn).not.toHaveBeenCalled();
jasmine.clock().tick(100);
expect(failFn).not.toHaveBeenCalled();
expect(queueableFn2.fn).toHaveBeenCalled();
});
});
});
it('does not cause an explicit fail if execution is being stopped', function() {
@@ -523,8 +603,7 @@ describe('QueueRunner', function() {
queueRunner = new jasmineUnderTest.QueueRunner({
queueableFns: [queueableFn],
onException: onException
}),
env = jasmineUnderTest.getEnv();
});
queueRunner.execute();

View File

@@ -105,6 +105,12 @@ getJasmineRequireObj().QueueRunner = function(j$) {
self.fail(err);
}
self.errored = errored = true;
} else if (typeof err !== 'undefined' && !self.errored) {
self.deprecated(
'Any argument passed to a done callback will be treated as an ' +
'error in a future release. Call the done callback without ' +
"arguments if you don't want to trigger a spec failure."
);
}
function runNext() {
@@ -210,7 +216,12 @@ getJasmineRequireObj().QueueRunner = function(j$) {
this.clearStack(function() {
self.globalErrors.popListener(self.handleFinalError);
self.onComplete(self.errored && new StopExecutionError());
if (self.errored) {
self.onComplete(new StopExecutionError());
} else {
self.onComplete();
}
});
};

View File

@@ -119,10 +119,11 @@ getJasmineRequireObj().Spec = function(j$) {
self.onException.apply(self, arguments);
},
onComplete: function() {
onComplete(
self.result.status === 'failed' &&
new j$.StopExecutionError('spec failed')
);
if (self.result.status === 'failed') {
onComplete(new j$.StopExecutionError('spec failed'));
} else {
onComplete();
}
},
userContext: this.userContext()
};