@@ -10,6 +10,43 @@ let redisClient;
1010let redisEnabled = false ;
1111
1212try {
13+ // *** ADD CHECK FOR TEST ENVIRONMENT ***
14+ if ( process . env . NODE_ENV === "test" ) {
15+ console . log ( "Skipping Redis initialization in test environment." ) ;
16+ redisEnabled = false ;
17+ redisReadyPromise = Promise . resolve ( false ) ;
18+ // Create dummy client immediately
19+ redisClient = {
20+ get : ( ) => Promise . resolve ( null ) ,
21+ set : ( ) => Promise . resolve ( "OK" ) ,
22+ setex : ( ) => Promise . resolve ( "OK" ) ,
23+ del : ( ) => Promise . resolve ( 0 ) ,
24+ exists : ( ) => Promise . resolve ( 0 ) ,
25+ expire : ( ) => Promise . resolve ( 1 ) ,
26+ flushall : ( ) => Promise . resolve ( "OK" ) ,
27+ info : ( ) => Promise . resolve ( "" ) ,
28+ dbsize : ( ) => Promise . resolve ( 0 ) ,
29+ pipeline : ( ) => ( { del : ( ) => ( { } ) , exec : ( ) => Promise . resolve ( [ ] ) } ) ,
30+ connect : ( ) => Promise . resolve ( ) ,
31+ quit : ( ) => Promise . resolve ( ) ,
32+ scanStream : ( ) => {
33+ // Create a dummy event emitter that emits no data and ends immediately
34+ const emitter = new EventEmitter ( ) ;
35+ setTimeout ( ( ) => {
36+ emitter . emit ( "data" , [ ] ) ;
37+ emitter . emit ( "end" ) ;
38+ } , 0 ) ;
39+ return emitter ;
40+ } ,
41+ on : ( ) => { } , // Add dummy 'on' to prevent errors if called
42+ removeAllListeners : ( ) => { } , // Add dummy removeAllListeners
43+ } ;
44+ // Throw a dummy error to bypass the rest of the try block cleanly
45+ // (This is a simple way to exit the try block early)
46+ throw new Error ( "TEST_ENV_SKIP" ) ;
47+ }
48+ // *** END CHECK ***
49+
1350 console . log ( "Initializing Redis client..." ) ;
1451
1552 // Determine connection options
@@ -68,36 +105,43 @@ try {
68105 }
69106 } , 5000 ) ;
70107} catch ( error ) {
71- console . error ( "Failed to initialize Redis client:" , error ) ;
72- // Create a promise that resolves to false
73- redisReadyPromise = Promise . resolve ( false ) ;
74- // Create a dummy client to prevent app crashes if Redis is unavailable
75- redisClient = {
76- get : ( ) => Promise . resolve ( null ) ,
77- set : ( ) => Promise . resolve ( "OK" ) ,
78- setex : ( ) => Promise . resolve ( "OK" ) ,
79- del : ( ) => Promise . resolve ( 0 ) ,
80- exists : ( ) => Promise . resolve ( 0 ) ,
81- expire : ( ) => Promise . resolve ( 1 ) ,
82- flushall : ( ) => Promise . resolve ( "OK" ) ,
83- info : ( ) => Promise . resolve ( "" ) ,
84- dbsize : ( ) => Promise . resolve ( 0 ) ,
85- pipeline : ( ) => ( {
86- del : ( ) => ( { } ) ,
87- exec : ( ) => Promise . resolve ( [ ] ) ,
88- } ) ,
89- connect : ( ) => Promise . resolve ( ) ,
90- quit : ( ) => Promise . resolve ( ) ,
91- scanStream : ( ) => {
92- // Create a dummy event emitter that emits no data and ends immediately
93- const emitter = new EventEmitter ( ) ;
94- setTimeout ( ( ) => {
95- emitter . emit ( "data" , [ ] ) ;
96- emitter . emit ( "end" ) ;
97- } , 0 ) ;
98- return emitter ;
99- } ,
100- } ;
108+ // Catch the dummy error specifically, otherwise handle real errors
109+ if ( error . message !== "TEST_ENV_SKIP" ) {
110+ console . error ( "Failed to initialize Redis client:" , error ) ;
111+ // Ensure dummy client is created on real errors too
112+ if ( ! redisClient ) {
113+ redisReadyPromise = Promise . resolve ( false ) ;
114+ redisClient = {
115+ get : ( ) => Promise . resolve ( null ) ,
116+ set : ( ) => Promise . resolve ( "OK" ) ,
117+ setex : ( ) => Promise . resolve ( "OK" ) ,
118+ del : ( ) => Promise . resolve ( 0 ) ,
119+ exists : ( ) => Promise . resolve ( 0 ) ,
120+ expire : ( ) => Promise . resolve ( 1 ) ,
121+ flushall : ( ) => Promise . resolve ( "OK" ) ,
122+ info : ( ) => Promise . resolve ( "" ) ,
123+ dbsize : ( ) => Promise . resolve ( 0 ) ,
124+ pipeline : ( ) => ( {
125+ del : ( ) => ( { } ) ,
126+ exec : ( ) => Promise . resolve ( [ ] ) ,
127+ } ) ,
128+ connect : ( ) => Promise . resolve ( ) ,
129+ quit : ( ) => Promise . resolve ( ) ,
130+ scanStream : ( ) => {
131+ // Create a dummy event emitter that emits no data and ends immediately
132+ const emitter = new EventEmitter ( ) ;
133+ setTimeout ( ( ) => {
134+ emitter . emit ( "data" , [ ] ) ;
135+ emitter . emit ( "end" ) ;
136+ } , 0 ) ;
137+ return emitter ;
138+ } ,
139+ on : ( ) => { } , // Add dummy 'on' to prevent errors if called
140+ removeAllListeners : ( ) => { } , // Add dummy removeAllListeners
141+ } ;
142+ }
143+ }
144+ // If it was the TEST_ENV_SKIP error, we've already set up the dummy client.
101145}
102146
103147// Wait for Redis connection before continuing
0 commit comments