Skip to content

Commit

Permalink
[lifecycle hooks] Make afterAll hooks operate in the fashion as after…
Browse files Browse the repository at this point in the history
…Each.

It was discovered that afterAll hooks run in the same order that you add them,
while afterEach hooks were running in reverse order.  This commit makes their
order consistent, and adds regression tests.

Relevant issue - #3268
  • Loading branch information
gdborton committed Apr 10, 2017
1 parent b93f9c6 commit 1cc4d53
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
describe('test lifecycle hooks', () => {
const actions = [];
function pushMessage(message) {
return () => {
actions.push(message);
};
}

// Validate in an afterAll to prevent previous hooks from firing again.
// Note that when operating correctly, this afterAll will be called last.
afterAll(() => {
const expected = [
'runner beforeAll1',
'runner beforeAll2',
'runner beforeEach1',
'runner beforeEach2',
'beforeEach1',
'beforeEach2',
'outer it 1',
'afterEach2',
'afterEach1',
'runner afterEach2',
'runner afterEach1',
'runner afterAll2',
'runner afterAll1'
];

expect(actions).toEqual(expected);
});

beforeAll(pushMessage('runner beforeAll1'));
afterAll(pushMessage('runner afterAll1'));
beforeAll(pushMessage('runner beforeAll2'));
afterAll(pushMessage('runner afterAll2'));
beforeEach(pushMessage('runner beforeEach1'));
afterEach(pushMessage('runner afterEach1'));
beforeEach(pushMessage('runner beforeEach2'));
afterEach(pushMessage('runner afterEach2'));

describe('Something', () => {
beforeEach(pushMessage('beforeEach1'));
afterEach(pushMessage('afterEach1'));
beforeEach(pushMessage('beforeEach2'));
afterEach(pushMessage('afterEach2'));
it('does it 1', pushMessage('outer it 1'));
});
});
2 changes: 1 addition & 1 deletion packages/jest-jasmine2/src/jasmine/Suite.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ Suite.prototype.afterEach = function(fn) {
};

Suite.prototype.afterAll = function(fn) {
this.afterAllFns.push(fn);
this.afterAllFns.unshift(fn);
};

Suite.prototype.addChild = function(child) {
Expand Down

0 comments on commit 1cc4d53

Please sign in to comment.