This was already done for everything except spec cleanup fns, since the various skip policies need to know the difference between afterEach and afterAll.
132 lines
3.7 KiB
JavaScript
132 lines
3.7 KiB
JavaScript
describe('CompleteOnFirstErrorSkipPolicy', function() {
|
|
describe('#skipTo', function() {
|
|
describe('Before anything has errored', function() {
|
|
it('returns the next index', function() {
|
|
const policy = new jasmineUnderTest.CompleteOnFirstErrorSkipPolicy(
|
|
arrayOfArbitraryFns(4),
|
|
4
|
|
);
|
|
expect(policy.skipTo(1)).toEqual(2);
|
|
});
|
|
});
|
|
|
|
describe('After something has errored', function() {
|
|
it('skips non cleanup fns', function() {
|
|
const fns = arrayOfArbitraryFns(4);
|
|
fns[2].type = arbitraryCleanupType();
|
|
fns[3].type = arbitraryCleanupType();
|
|
const policy = new jasmineUnderTest.CompleteOnFirstErrorSkipPolicy(fns);
|
|
|
|
policy.fnErrored(0);
|
|
expect(policy.skipTo(0)).toEqual(2);
|
|
expect(policy.skipTo(2)).toEqual(3);
|
|
expect(policy.skipTo(3)).toEqual(4);
|
|
});
|
|
|
|
for (const type of ['afterEach', 'specCleanup', 'afterAll']) {
|
|
it(`does not skip ${type} fns`, function() {
|
|
const fns = arrayOfArbitraryFns(2);
|
|
fns[1].type = type;
|
|
const policy = new jasmineUnderTest.CompleteOnFirstErrorSkipPolicy(
|
|
fns
|
|
);
|
|
|
|
policy.fnErrored(0);
|
|
expect(policy.skipTo(0)).toEqual(1);
|
|
});
|
|
}
|
|
|
|
describe('When the error was in a beforeEach fn', function() {
|
|
it('runs cleanup fns defined by the current and containing suites', function() {
|
|
const parentSuite = { description: 'parentSuite' };
|
|
const suite = { description: 'suite', parentSuite };
|
|
const fns = [
|
|
{
|
|
suite: suite
|
|
},
|
|
{
|
|
fn: () => {}
|
|
},
|
|
{
|
|
fn: () => {},
|
|
suite: suite,
|
|
type: arbitraryCleanupType()
|
|
},
|
|
{
|
|
fn: () => {},
|
|
suite: parentSuite,
|
|
type: arbitraryCleanupType()
|
|
}
|
|
];
|
|
const policy = new jasmineUnderTest.CompleteOnFirstErrorSkipPolicy(
|
|
fns
|
|
);
|
|
|
|
policy.fnErrored(0);
|
|
expect(policy.skipTo(0)).toEqual(2);
|
|
expect(policy.skipTo(2)).toEqual(3);
|
|
});
|
|
|
|
it('skips cleanup fns defined by nested suites', function() {
|
|
const parentSuite = { description: 'parentSuite' };
|
|
const suite = { description: 'suite', parentSuite };
|
|
const fns = [
|
|
{
|
|
fn: () => {},
|
|
type: 'beforeEach',
|
|
suite: parentSuite
|
|
},
|
|
{
|
|
fn: () => {}
|
|
},
|
|
{
|
|
fn: () => {},
|
|
suite: suite,
|
|
type: arbitraryCleanupType()
|
|
},
|
|
{
|
|
fn: () => {},
|
|
suite: parentSuite,
|
|
type: arbitraryCleanupType()
|
|
}
|
|
];
|
|
const policy = new jasmineUnderTest.CompleteOnFirstErrorSkipPolicy(
|
|
fns
|
|
);
|
|
|
|
policy.fnErrored(0);
|
|
expect(policy.skipTo(0)).toEqual(3);
|
|
});
|
|
});
|
|
|
|
it('does not skip cleanup fns that have no suite, such as the spec complete fn', function() {
|
|
const fns = [
|
|
{ fn: () => {} },
|
|
{
|
|
fn: () => {},
|
|
type: arbitraryCleanupType()
|
|
}
|
|
];
|
|
const policy = new jasmineUnderTest.CompleteOnFirstErrorSkipPolicy(fns);
|
|
|
|
policy.fnErrored(0);
|
|
expect(policy.skipTo(0)).toEqual(1);
|
|
});
|
|
});
|
|
});
|
|
|
|
function arrayOfArbitraryFns(n) {
|
|
const result = [];
|
|
|
|
for (let i = 0; i < n; i++) {
|
|
result.push({ fn: () => {} });
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function arbitraryCleanupType() {
|
|
return 'specCleanup';
|
|
}
|
|
});
|