Skip to content

Commit b3469ad

Browse files
committed
fix UTs
1 parent 52af0b6 commit b3469ad

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

lib/mocha/asyncWrapper.js

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)