@@ -408,59 +408,104 @@ describe('Form.Validate', () => {
408
408
errorSpy . mockRestore ( ) ;
409
409
} ) ;
410
410
411
- it ( 'validateFirst' , async ( ) => {
412
- let form ;
413
- let canEnd = false ;
414
- const onFinish = jest . fn ( ) ;
411
+ describe ( 'validateFirst' , ( ) => {
412
+ it ( 'work' , async ( ) => {
413
+ let form ;
414
+ let canEnd = false ;
415
+ const onFinish = jest . fn ( ) ;
415
416
416
- const wrapper = mount (
417
- < div >
418
- < Form
419
- ref = { instance => {
420
- form = instance ;
421
- } }
422
- onFinish = { onFinish }
423
- >
424
- < InfoField
425
- name = "username"
426
- validateFirst
427
- rules = { [
428
- // Follow promise will never end
429
- { required : true } ,
430
- {
431
- validator : ( ) =>
432
- new Promise ( resolve => {
433
- if ( canEnd ) {
434
- resolve ( ) ;
435
- }
436
- } ) ,
437
- } ,
438
- ] }
439
- />
440
- </ Form >
441
- </ div > ,
442
- ) ;
417
+ const wrapper = mount (
418
+ < div >
419
+ < Form
420
+ ref = { instance => {
421
+ form = instance ;
422
+ } }
423
+ onFinish = { onFinish }
424
+ >
425
+ < InfoField
426
+ name = "username"
427
+ validateFirst
428
+ rules = { [
429
+ // Follow promise will never end
430
+ { required : true } ,
431
+ {
432
+ validator : ( ) =>
433
+ new Promise ( resolve => {
434
+ if ( canEnd ) {
435
+ resolve ( ) ;
436
+ }
437
+ } ) ,
438
+ } ,
439
+ ] }
440
+ />
441
+ </ Form >
442
+ </ div > ,
443
+ ) ;
443
444
444
- // Not pass
445
- await changeValue ( wrapper , '' ) ;
446
- matchError ( wrapper , true ) ;
447
- expect ( form . getFieldError ( 'username' ) ) . toEqual ( [ "'username' is required" ] ) ;
448
- expect ( form . getFieldsError ( ) ) . toEqual ( [
449
- {
450
- name : [ 'username' ] ,
451
- errors : [ "'username' is required" ] ,
452
- } ,
453
- ] ) ;
454
- expect ( onFinish ) . not . toHaveBeenCalled ( ) ;
445
+ // Not pass
446
+ await changeValue ( wrapper , '' ) ;
447
+ matchError ( wrapper , true ) ;
448
+ expect ( form . getFieldError ( 'username' ) ) . toEqual ( [ "'username' is required" ] ) ;
449
+ expect ( form . getFieldsError ( ) ) . toEqual ( [
450
+ {
451
+ name : [ 'username' ] ,
452
+ errors : [ "'username' is required" ] ,
453
+ } ,
454
+ ] ) ;
455
+ expect ( onFinish ) . not . toHaveBeenCalled ( ) ;
455
456
456
- // Should pass
457
- canEnd = true ;
458
- await changeValue ( wrapper , 'test' ) ;
459
- wrapper . find ( 'form' ) . simulate ( 'submit' ) ;
460
- await timeout ( ) ;
457
+ // Should pass
458
+ canEnd = true ;
459
+ await changeValue ( wrapper , 'test' ) ;
460
+ wrapper . find ( 'form' ) . simulate ( 'submit' ) ;
461
+ await timeout ( ) ;
461
462
462
- matchError ( wrapper , false ) ;
463
- expect ( onFinish ) . toHaveBeenCalledWith ( { username : 'test' } ) ;
463
+ matchError ( wrapper , false ) ;
464
+ expect ( onFinish ) . toHaveBeenCalledWith ( { username : 'test' } ) ;
465
+ } ) ;
466
+
467
+ [
468
+ { name : 'serialization' , first : true , second : false , validateFirst : true } ,
469
+ { name : 'parallel' , first : true , second : true , validateFirst : 'parallel' } ,
470
+ ] . forEach ( ( { name, first, second, validateFirst } ) => {
471
+ it ( name , async ( ) => {
472
+ let ruleFirst = false ;
473
+ let ruleSecond = false ;
474
+
475
+ const wrapper = mount (
476
+ < Form >
477
+ < InfoField
478
+ name = "username"
479
+ validateFirst = { validateFirst }
480
+ rules = { [
481
+ {
482
+ validator : async ( ) => {
483
+ ruleFirst = true ;
484
+ await timeout ( ) ;
485
+ throw new Error ( 'failed first' ) ;
486
+ } ,
487
+ } ,
488
+ {
489
+ validator : async ( ) => {
490
+ ruleSecond = true ;
491
+ await timeout ( ) ;
492
+ throw new Error ( 'failed second' ) ;
493
+ } ,
494
+ } ,
495
+ ] }
496
+ />
497
+ </ Form > ,
498
+ ) ;
499
+
500
+ await changeValue ( wrapper , 'test' ) ;
501
+ await timeout ( ) ;
502
+
503
+ matchError ( wrapper , 'failed first' ) ;
504
+
505
+ expect ( ruleFirst ) . toEqual ( first ) ;
506
+ expect ( ruleSecond ) . toEqual ( second ) ;
507
+ } ) ;
508
+ } ) ;
464
509
} ) ;
465
510
466
511
it ( 'switch to remove errors' , async ( ) => {
0 commit comments