@@ -39,28 +39,34 @@ class MochaFactory {
3939 process.exit(1)
4040 }
4141
42- mocha.loadFiles = fn => {
42+ // Override loadFiles to handle feature files
43+ const originalLoadFiles = Mocha.prototype.loadFiles
44+ mocha.loadFiles = function (fn) {
4345 // load features
44- if (mocha.suite.suites.length === 0) {
45- const featureFiles = mocha.files.filter(file => file.match(/\.feature$/))
46+ const featureFiles = this.files.filter(file => file.match(/\.feature$/))
47+ if (featureFiles.length > 0) {
48+ // Load translations for Gherkin features
49+ loadTranslations().catch(() => {
50+ // Ignore if translations can't be loaded
51+ })
52+
4653 for (const file of featureFiles) {
4754 const suite = gherkinParser(fs.readFileSync(file, 'utf8'), file)
48- mocha .suite.addSuite(suite)
55+ this .suite.addSuite(suite)
4956 }
5057
5158 // remove feature files
52- const jsFiles = mocha .files.filter(file => !file.match(/\.feature$/))
53- mocha .files = mocha .files.filter(file => !file.match(/\.feature$/))
59+ const jsFiles = this .files.filter(file => !file.match(/\.feature$/))
60+ this .files = this .files.filter(file => !file.match(/\.feature$/))
5461
5562 // Load JavaScript test files using ESM imports
5663 if (jsFiles.length > 0) {
5764 try {
5865 // Try original loadFiles first for compatibility
59- Mocha.prototype.loadFiles. call(mocha , fn)
66+ originalLoadFiles. call(this , fn)
6067 } catch (e) {
6168 // If original loadFiles fails, load ESM files manually
6269 if (e.message.includes('not in cache') || e.message.includes('ESM') || e.message.includes('getStatus')) {
63- console.warn('Loading ESM test files manually due to Mocha compatibility issues')
6470 // Load ESM files by importing them synchronously using top-level await workaround
6571 for (const file of jsFiles) {
6672 try {
@@ -71,8 +77,10 @@ class MochaFactory {
7177 // If dynamic import fails, the file may have syntax errors or other issues
7278 console.error(`Failed to load test file ${file}:`, importErr.message)
7379 })
80+ if (fn) fn()
7481 } catch (fileErr) {
7582 console.error(`Error processing test file ${file}:`, fileErr.message)
83+ if (fn) fn(fileErr)
7684 }
7785 }
7886 } else {
@@ -85,7 +93,7 @@ class MochaFactory {
8593 const dupes = []
8694 let missingFeatureInFile = []
8795 const seenTests = []
88- mocha .suite.eachTest(test => {
96+ this .suite.eachTest(test => {
8997 if (!test) {
9098 return // Skip undefined tests
9199 }
@@ -108,6 +116,9 @@ class MochaFactory {
108116 missingFeatureInFile = [...new Set(missingFeatureInFile)]
109117 output.error(`Missing Feature section in:\n${missingFeatureInFile.join('\n')}`)
110118 }
119+ } else {
120+ // Use original for non-feature files
121+ originalLoadFiles.call(this, fn)
111122 }
112123 }
113124
0 commit comments