Skip to content

Commit 770749e

Browse files
danikkrapivnitskiydanielkrapiunitski-emplificursoragent
authored
fix(gherkin): emit test.before/after with real current test (#5580)
Gherkin beforeEach/afterEach pass Mocha hook Context into setup/teardown, but asyncWrapper read suite.ctx.currentTest (undefined on Context), so event.test.before received a placeholder test (title "...", empty tags). Also forward Mocha's done callback instead of no-op () => {}, so event.test.before completes before scenario Background Before hooks run. Co-authored-by: Daniil Krapiunitski <daniil.krapiunitski@emplifi.io> Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 080da45 commit 770749e

2 files changed

Lines changed: 7 additions & 8 deletions

File tree

lib/mocha/asyncWrapper.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ export function setup(suite) {
199199
recorder.startUnlessRunning()
200200
import('./test.js').then(testModule => {
201201
const { enhanceMochaTest } = testModule.default || testModule
202-
event.emit(event.test.before, enhanceMochaTest(suite?.ctx?.currentTest))
202+
event.emit(event.test.before, enhanceMochaTest(suite?.currentTest ?? suite?.ctx?.currentTest))
203203
recorder.add(() => doneFn())
204204
})
205205
}
@@ -211,7 +211,7 @@ export function teardown(suite) {
211211
recorder.startUnlessRunning()
212212
import('./test.js').then(testModule => {
213213
const { enhanceMochaTest } = testModule.default || testModule
214-
event.emit(event.test.after, enhanceMochaTest(suite?.ctx?.currentTest))
214+
event.emit(event.test.after, enhanceMochaTest(suite?.currentTest ?? suite?.ctx?.currentTest))
215215
recorder.add(() => doneFn())
216216
})
217217
}

lib/mocha/gherkin.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,12 @@ const gherkinParser = (text, file) => {
4242
suite.file = file
4343
suite.timeout(0)
4444

45-
suite.beforeEach('codeceptjs.before', function () {
46-
// In Mocha, 'this' refers to the current test in beforeEach/afterEach hooks
47-
setup(this)(() => {})
45+
suite.beforeEach('codeceptjs.before', function (done) {
46+
// In Mocha, 'this' is the hook Context; currentTest is the running scenario
47+
setup(this)(done)
4848
})
49-
suite.afterEach('codeceptjs.after', function () {
50-
// In Mocha, 'this' refers to the current test in beforeEach/afterEach hooks
51-
teardown(this)(() => {})
49+
suite.afterEach('codeceptjs.after', function (done) {
50+
teardown(this)(done)
5251
})
5352
suite.beforeAll('codeceptjs.beforeSuite', suiteSetup(suite))
5453
suite.afterAll('codeceptjs.afterSuite', suiteTeardown(suite))

0 commit comments

Comments
 (0)