@@ -25,7 +25,7 @@ describe('Cloud Code Logger', () => {
2525 } )
2626 . then ( ( ) => {
2727 return Parse . User . signUp ( 'tester' , 'abc' )
28- . catch ( ( ) => { } )
28+ . catch ( ( ) => { } )
2929 . then ( loggedInUser => ( user = loggedInUser ) )
3030 . then ( ( ) => Parse . User . logIn ( user . get ( 'username' ) , 'abc' ) ) ;
3131 } )
@@ -139,7 +139,7 @@ describe('Cloud Code Logger', () => {
139139 } ) ;
140140
141141 it_id ( '9857e15d-bb18-478d-8a67-fdaad3e89565' ) ( it ) ( 'should log an afterSave' , done => {
142- Parse . Cloud . afterSave ( 'MyObject' , ( ) => { } ) ;
142+ Parse . Cloud . afterSave ( 'MyObject' , ( ) => { } ) ;
143143 new Parse . Object ( 'MyObject' )
144144 . save ( )
145145 . then ( ( ) => {
@@ -383,22 +383,39 @@ describe('Cloud Code Logger', () => {
383383 triggerBeforeError : 'silent' ,
384384 } ,
385385 } ) ;
386+
387+ let afterSaveCompleted ;
388+ const afterSavePromise = new Promise ( resolve => {
389+ afterSaveCompleted = resolve ;
390+ } ) ;
391+
386392 Parse . Cloud . beforeSave ( 'TestClassError' , ( ) => {
387393 throw new Error ( 'Failed' ) ;
388394 } ) ;
389- Parse . Cloud . beforeSave ( 'TestClass' , ( ) => { } ) ;
390- Parse . Cloud . afterSave ( 'TestClass' , ( ) => { } ) ;
395+ Parse . Cloud . beforeSave ( 'TestClass' , ( ) => { } ) ;
396+ Parse . Cloud . afterSave ( 'TestClass' , async ( ) => {
397+ try {
398+ // Ensure afterSave completes without errors
399+ afterSaveCompleted ( ) ;
400+ } catch ( e ) {
401+ // Prevent unhandled rejections
402+ afterSaveCompleted ( ) ;
403+ }
404+ } ) ;
391405
392406 spy = spyOn ( Config . get ( 'test' ) . loggerController . adapter , 'log' ) . and . callThrough ( ) ;
393407
394408 const obj = new Parse . Object ( 'TestClass' ) ;
395409 await obj . save ( ) ;
396- // Wait for afterSave to complete
410+ // Wait for afterSave to actually complete
411+ await afterSavePromise ;
397412 await new Promise ( resolve => setTimeout ( resolve , 100 ) ) ;
398413 expect ( spy ) . toHaveBeenCalledTimes ( 0 ) ;
399414
400415 const objError = new Parse . Object ( 'TestClassError' ) ;
401416 await expectAsync ( objError . save ( ) ) . toBeRejected ( ) ;
417+ // Wait for any async error handling to complete
418+ await new Promise ( resolve => setTimeout ( resolve , 100 ) ) ;
402419 // Not "beforeSave failed for TestClassError for user ..."
403420 expect ( spy ) . toHaveBeenCalledTimes ( 1 ) ;
404421 } ) ;
0 commit comments