@@ -60,7 +60,8 @@ function test(test) {
6060 let testPassed = false
6161 // Ensure recorder is running so any steps added inside test function are executed
6262 recorder . startUnlessRunning ( )
63- // Fire started event immediately so listeners are notified prior to queued steps
63+ // Fire before event first, then started event so listeners are notified prior to queued steps
64+ event . emit ( event . test . before , test )
6465 event . emit ( event . test . started , test )
6566 recorder . errHandler ( err => {
6667 recorder . session . start ( 'teardown' )
@@ -74,6 +75,12 @@ function test(test) {
7475 event . emit ( event . test . passed , test )
7576 }
7677 event . emit ( event . test . finished , test )
78+ // Add test.after emission after event listeners have added their operations
79+ process . nextTick ( ( ) => {
80+ recorder . add ( 'fire test.after' , ( ) => {
81+ event . emit ( event . test . after , test )
82+ } )
83+ } )
7784 recorder . add ( doneFn )
7885 return
7986 } catch ( newErr ) {
@@ -83,6 +90,12 @@ function test(test) {
8390 test . err = err
8491 event . emit ( event . test . failed , test , err )
8592 event . emit ( event . test . finished , test )
93+ // Add test.after emission after event listeners have added their operations
94+ setImmediate ( ( ) => {
95+ recorder . add ( 'fire test.after for failed test' , ( ) => {
96+ event . emit ( event . test . after , test )
97+ } )
98+ } )
8699 recorder . add ( ( ) => doneFn ( err ) )
87100 } )
88101
@@ -100,9 +113,12 @@ function test(test) {
100113 event . emit ( event . test . passed , test )
101114 }
102115 event . emit ( event . test . finished , test )
103- } )
104- recorder . add ( 'fire test.after' , ( ) => {
105- event . emit ( event . test . after , test )
116+ // Add test.after to the queue after event listeners have added their operations
117+ process . nextTick ( ( ) => {
118+ recorder . add ( 'fire test.after' , ( ) => {
119+ event . emit ( event . test . after , test )
120+ } )
121+ } )
106122 } )
107123 recorder . add ( 'finish test' , doneFn )
108124 recorder . catch ( )
@@ -121,7 +137,10 @@ function injected(fn, suite, hookName) {
121137 recorder . cleanAsyncErr ( )
122138 if ( hookName == 'before' || hookName == 'beforeSuite' ) suiteTestFailedHookError ( suite , err , hookName )
123139 if ( hookName === 'after' ) suite . eachTest ( test => event . emit ( event . test . after , test ) )
124- if ( hookName === 'afterSuite' ) event . emit ( event . suite . after , suite )
140+ if ( hookName === 'afterSuite' && ! suite . _suiteAfterEventEmitted ) {
141+ suite . _suiteAfterEventEmitted = true
142+ event . emit ( event . suite . after , suite )
143+ }
125144 recorder . add ( ( ) => doneFn ( err ) )
126145 }
127146
@@ -168,6 +187,10 @@ function injected(fn, suite, hookName) {
168187 . then ( ( ) => {
169188 recorder . add ( 'fire hook.passed' , ( ) => fireHook ( event . hook . passed , suite ) )
170189 recorder . add ( 'fire hook.finished' , ( ) => fireHook ( event . hook . finished , suite ) )
190+ if ( hookName === 'afterSuite' && ! suite . _suiteAfterEventEmitted ) {
191+ suite . _suiteAfterEventEmitted = true
192+ recorder . add ( 'fire suite.after' , ( ) => event . emit ( event . suite . after , suite ) )
193+ }
171194 recorder . add ( `finish ${ hookName } hook` , doneFn )
172195 recorder . catch ( )
173196 } )
0 commit comments