@@ -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 ( / \. f e a t u r e $ / ) )
46+ const featureFiles = this . files . filter ( file => file . match ( / \. f e a t u r e $ / ) )
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 ( / \. f e a t u r e $ / ) )
53- mocha . files = mocha . files . filter ( file => ! file . match ( / \. f e a t u r e $ / ) )
59+ const jsFiles = this . files . filter ( file => ! file . match ( / \. f e a t u r e $ / ) )
60+ this . files = this . files . filter ( file => ! file . match ( / \. f e a t u r e $ / ) )
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