@@ -3188,12 +3188,84 @@ function testDomRouter(
31883188 }
31893189
31903190 fireEvent . click ( screen . getByText ( "Submit" ) ) ;
3191- let formData = await actionSpy . mock . calls [ 0 ] [ 0 ] . request . formData ( ) ;
3191+ let request = actionSpy . mock . calls [ 0 ] [ 0 ] . request ;
3192+ expect ( request . headers . get ( "Content-Type" ) ) . toBe (
3193+ "application/x-www-form-urlencoded;charset=UTF-8"
3194+ ) ;
3195+ let formData = await request . formData ( ) ;
31923196 expect ( formData . get ( "a" ) ) . toBe ( "1" ) ;
31933197 expect ( formData . get ( "b" ) ) . toBe ( "2" ) ;
31943198 expect ( actionSpy . mock . calls [ 0 ] [ 0 ] . payload ) . toBe ( undefined ) ;
31953199 } ) ;
31963200
3201+ it ( "serializes JSON on submit(object)/encType:application/json submissions" , async ( ) => {
3202+ let actionSpy = jest . fn ( ) ;
3203+ let router = createTestRouter (
3204+ createRoutesFromElements (
3205+ < Route path = "/" action = { actionSpy } element = { < FormPage /> } />
3206+ ) ,
3207+ { window : getWindow ( "/" ) }
3208+ ) ;
3209+ render ( < RouterProvider router = { router } /> ) ;
3210+
3211+ let payload = { a : "1" , b : "2" } ;
3212+ function FormPage ( ) {
3213+ let submit = useSubmit ( ) ;
3214+ return (
3215+ < button
3216+ onClick = { ( ) =>
3217+ submit ( payload , {
3218+ method : "post" ,
3219+ encType : "application/json" ,
3220+ } )
3221+ }
3222+ >
3223+ Submit
3224+ </ button >
3225+ ) ;
3226+ }
3227+
3228+ fireEvent . click ( screen . getByText ( "Submit" ) ) ;
3229+ let request = actionSpy . mock . calls [ 0 ] [ 0 ] . request ;
3230+ expect ( request . headers . get ( "Content-Type" ) ) . toBe ( "application/json" ) ;
3231+ expect ( await request . json ( ) ) . toEqual ( { a : "1" , b : "2" } ) ;
3232+ expect ( actionSpy . mock . calls [ 0 ] [ 0 ] . payload ) . toBe ( payload ) ;
3233+ } ) ;
3234+
3235+ it ( "serializes text on submit(object)/encType:text/plain submissions" , async ( ) => {
3236+ let actionSpy = jest . fn ( ) ;
3237+ let router = createTestRouter (
3238+ createRoutesFromElements (
3239+ < Route path = "/" action = { actionSpy } element = { < FormPage /> } />
3240+ ) ,
3241+ { window : getWindow ( "/" ) }
3242+ ) ;
3243+ render ( < RouterProvider router = { router } /> ) ;
3244+
3245+ let payload = "look ma, no formData!" ;
3246+ function FormPage ( ) {
3247+ let submit = useSubmit ( ) ;
3248+ return (
3249+ < button
3250+ onClick = { ( ) =>
3251+ submit ( payload , {
3252+ method : "post" ,
3253+ encType : "text/plain" ,
3254+ } )
3255+ }
3256+ >
3257+ Submit
3258+ </ button >
3259+ ) ;
3260+ }
3261+
3262+ fireEvent . click ( screen . getByText ( "Submit" ) ) ;
3263+ let request = actionSpy . mock . calls [ 0 ] [ 0 ] . request ;
3264+ expect ( request . headers . get ( "Content-Type" ) ) . toBe ( "text/plain" ) ;
3265+ expect ( await request . text ( ) ) . toEqual ( payload ) ;
3266+ expect ( actionSpy . mock . calls [ 0 ] [ 0 ] . payload ) . toBe ( payload ) ;
3267+ } ) ;
3268+
31973269 it ( "does not serialize formData on submit(object)/encType:null submissions" , async ( ) => {
31983270 let actionSpy = jest . fn ( ) ;
31993271 let payload ;
0 commit comments