@@ -243,74 +243,62 @@ describe('Buffer logs', () => {
243
243
expect ( console . error ) . toBeCalledTimes ( 1 ) ;
244
244
} ) ;
245
245
246
- it ( 'flushes the buffer when an uncaught error is thrown' , async ( ) => {
247
- // Prepare
248
- const logger = new Logger ( { logBufferOptions : { enabled : true } } ) ;
249
- class TestClass {
250
- @logger . injectLambdaContext ( { flushBufferOnUncaughtError : true } )
251
- async handler ( _event : unknown , _context : Context ) {
252
- logger . debug ( 'This is a log message' ) ;
253
- logger . info ( 'This is an info message' ) ;
254
- throw new Error ( 'This is an error' ) ;
255
- }
246
+ it . each ( [
247
+ {
248
+ handlerFactory : ( logger : Logger ) =>
249
+ middy ( )
250
+ . use (
251
+ injectLambdaContext ( logger , { flushBufferOnUncaughtError : true } )
252
+ )
253
+ . handler ( async ( ) => {
254
+ logger . debug ( 'This is a log message' ) ;
255
+ logger . info ( 'This is an info message' ) ;
256
+ throw new Error ( 'This is an error' ) ;
257
+ } ) ,
258
+ case : 'middleware' ,
259
+ } ,
260
+ {
261
+ handlerFactory : ( logger : Logger ) => {
262
+ class TestClass {
263
+ @logger . injectLambdaContext ( { flushBufferOnUncaughtError : true } )
264
+ async handler ( _event : unknown , _context : Context ) {
265
+ logger . debug ( 'This is a log message' ) ;
266
+ logger . info ( 'This is an info message' ) ;
267
+ throw new Error ( 'This is an error' ) ;
268
+ }
269
+ }
270
+ const lambda = new TestClass ( ) ;
271
+ return lambda . handler . bind ( lambda ) ;
272
+ } ,
273
+ case : 'decorator' ,
274
+ } ,
275
+ ] ) (
276
+ 'flushes the buffer when an uncaught error is thrown ($case)' ,
277
+ async ( { handlerFactory } ) => {
278
+ // Prepare
279
+ const logger = new Logger ( { logBufferOptions : { enabled : true } } ) ;
280
+ const handler = handlerFactory ( logger ) ;
281
+
282
+ // Act & Assess
283
+ await expect ( ( ) =>
284
+ handler (
285
+ {
286
+ foo : 'bar' ,
287
+ } ,
288
+ context
289
+ )
290
+ ) . rejects . toThrow ( new Error ( 'This is an error' ) ) ;
291
+ expect ( console . debug ) . toBeCalledTimes ( 1 ) ;
292
+ expect ( console . info ) . toBeCalledTimes ( 1 ) ;
293
+ expect ( console . error ) . toHaveLogged (
294
+ expect . objectContaining ( {
295
+ message : UncaughtErrorLogMessage ,
296
+ } )
297
+ ) ;
298
+ // If debug is called after info, it means it was buffered and then flushed
299
+ expect ( console . debug ) . toHaveBeenCalledAfter ( console . info as Mock ) ;
300
+ // If error is called after debug, it means the buffer was flushed before the error log
301
+ expect ( console . debug ) . toHaveBeenCalledBefore ( console . error as Mock ) ;
256
302
}
257
- const lambda = new TestClass ( ) ;
258
- const handler = lambda . handler . bind ( lambda ) ;
259
-
260
- // Act & Assess
261
- await expect ( ( ) =>
262
- handler (
263
- {
264
- foo : 'bar' ,
265
- } ,
266
- context
267
- )
268
- ) . rejects . toThrow ( new Error ( 'This is an error' ) ) ;
269
- expect ( console . debug ) . toBeCalledTimes ( 1 ) ;
270
- expect ( console . info ) . toBeCalledTimes ( 1 ) ;
271
- expect ( console . error ) . toHaveLogged (
272
- expect . objectContaining ( {
273
- message : UncaughtErrorLogMessage ,
274
- } )
275
- ) ;
276
- // If debug is called after info, it means it was buffered and then flushed
277
- expect ( console . debug ) . toHaveBeenCalledAfter ( console . info as Mock ) ;
278
- // If error is called after debug, it means the buffer was flushed before the error log
279
- expect ( console . debug ) . toHaveBeenCalledBefore ( console . error as Mock ) ;
280
- } ) ;
281
- it ( 'flushes the buffer when an uncaught error is thrown in a middy' , async ( ) => {
282
- // Prepare
283
- const logger = new Logger ( { logBufferOptions : { enabled : true } } ) ;
284
-
285
- const handlerFn = async ( _event : unknown , _context : Context ) => {
286
- logger . debug ( 'This is a log message' ) ;
287
- logger . info ( 'This is an info message' ) ;
288
- throw new Error ( 'This is an error' ) ;
289
- } ;
290
-
291
- const handler = middy ( )
292
- . use ( injectLambdaContext ( logger , { flushBufferOnUncaughtError : true } ) )
293
- . handler ( handlerFn ) ;
294
-
295
- // Act & Assess
296
- await expect ( ( ) =>
297
- handler (
298
- {
299
- foo : 'bar' ,
300
- } ,
301
- context
302
- )
303
- ) . rejects . toThrow ( new Error ( 'This is an error' ) ) ;
304
- expect ( console . debug ) . toBeCalledTimes ( 1 ) ;
305
- expect ( console . info ) . toBeCalledTimes ( 1 ) ;
306
- expect ( console . error ) . toHaveLogged (
307
- expect . objectContaining ( {
308
- message : UncaughtErrorLogMessage ,
309
- } )
310
- ) ;
311
- // If debug is called after info, it means it was buffered and then flushed
312
- expect ( console . debug ) . toHaveBeenCalledAfter ( console . info as Mock ) ;
313
- // If error is called after debug, it means the buffer was flushed before the error log
314
- expect ( console . debug ) . toHaveBeenCalledBefore ( console . error as Mock ) ;
315
- } ) ;
303
+ ) ;
316
304
} ) ;
0 commit comments