@@ -3188,12 +3188,84 @@ function testDomRouter(
3188
3188
}
3189
3189
3190
3190
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 ( ) ;
3192
3196
expect ( formData . get ( "a" ) ) . toBe ( "1" ) ;
3193
3197
expect ( formData . get ( "b" ) ) . toBe ( "2" ) ;
3194
3198
expect ( actionSpy . mock . calls [ 0 ] [ 0 ] . payload ) . toBe ( undefined ) ;
3195
3199
} ) ;
3196
3200
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
+
3197
3269
it ( "does not serialize formData on submit(object)/encType:null submissions" , async ( ) => {
3198
3270
let actionSpy = jest . fn ( ) ;
3199
3271
let payload ;
0 commit comments