@@ -365,6 +365,97 @@ describe('useMutation', () => {
365365 ] )
366366 } )
367367
368+ it ( 'should be able to override the error callbacks when using mutate' , async ( ) => {
369+ const callbacks : Array < string > = [ ]
370+
371+ function Page ( ) {
372+ const { mutate } = useMutation ( {
373+ mutationFn : async ( _text : string ) =>
374+ sleep ( 10 ) . then ( ( ) => Promise . reject ( new Error ( 'oops' ) ) ) ,
375+ onError : ( ) => {
376+ callbacks . push ( 'useMutation.onError' )
377+ } ,
378+ onSettled : ( ) => {
379+ callbacks . push ( 'useMutation.onSettled' )
380+ } ,
381+ } )
382+
383+ return (
384+ < button
385+ onClick = { ( ) =>
386+ mutate ( 'todo' , {
387+ onError : ( ) => {
388+ callbacks . push ( 'mutate.onError' )
389+ } ,
390+ onSettled : ( ) => {
391+ callbacks . push ( 'mutate.onSettled' )
392+ } ,
393+ } )
394+ }
395+ >
396+ mutate
397+ </ button >
398+ )
399+ }
400+
401+ const rendered = renderWithClient ( queryClient , < Page /> )
402+
403+ fireEvent . click ( rendered . getByRole ( 'button' , { name : / m u t a t e / i } ) )
404+ await vi . advanceTimersByTimeAsync ( 10 )
405+
406+ expect ( callbacks ) . toEqual ( [
407+ 'useMutation.onError' ,
408+ 'useMutation.onSettled' ,
409+ 'mutate.onError' ,
410+ 'mutate.onSettled' ,
411+ ] )
412+ } )
413+
414+ it ( 'should be able to override the settled callbacks when using mutate' , async ( ) => {
415+ const callbacks : Array < string > = [ ]
416+
417+ function Page ( ) {
418+ const { mutate } = useMutation ( {
419+ mutationFn : ( text : string ) => sleep ( 10 ) . then ( ( ) => text ) ,
420+ onSuccess : ( ) => {
421+ callbacks . push ( 'useMutation.onSuccess' )
422+ } ,
423+ onSettled : ( ) => {
424+ callbacks . push ( 'useMutation.onSettled' )
425+ } ,
426+ } )
427+
428+ return (
429+ < button
430+ onClick = { ( ) =>
431+ mutate ( 'todo' , {
432+ onSuccess : ( ) => {
433+ callbacks . push ( 'mutate.onSuccess' )
434+ } ,
435+ onSettled : ( ) => {
436+ callbacks . push ( 'mutate.onSettled' )
437+ } ,
438+ } )
439+ }
440+ >
441+ mutate
442+ </ button >
443+ )
444+ }
445+
446+ const rendered = renderWithClient ( queryClient , < Page /> )
447+
448+ fireEvent . click ( rendered . getByRole ( 'button' , { name : / m u t a t e / i } ) )
449+ await vi . advanceTimersByTimeAsync ( 10 )
450+
451+ expect ( callbacks ) . toEqual ( [
452+ 'useMutation.onSuccess' ,
453+ 'useMutation.onSettled' ,
454+ 'mutate.onSuccess' ,
455+ 'mutate.onSettled' ,
456+ ] )
457+ } )
458+
368459 it ( 'should be able to use mutation defaults' , async ( ) => {
369460 const key = queryKey ( )
370461
0 commit comments