@@ -414,6 +414,193 @@ describe('effects', () => {
414
414
} , 200 ) ;
415
415
} ) ;
416
416
417
+ it ( 'type: poll' , done => {
418
+ const app = create ( ) ;
419
+ app . model ( {
420
+ namespace : 'count' ,
421
+ state : 0 ,
422
+ reducers : {
423
+ add ( state , { payload } ) {
424
+ return state + payload || 1 ;
425
+ } ,
426
+ } ,
427
+ effects : {
428
+ pollAdd : [
429
+ function * ( _ , { put } ) {
430
+ yield put ( { type : 'add' , payload : 1 } ) ;
431
+ } ,
432
+ { type : 'poll' , delay : 1000 } ,
433
+ ] ,
434
+ } ,
435
+ } ) ;
436
+ app . start ( ) ;
437
+
438
+ app . _store . dispatch ( { type : 'count/pollAdd-start' } ) ;
439
+
440
+ setTimeout ( ( ) => {
441
+ app . _store . dispatch ( { type : 'count/pollAdd-stop' } ) ;
442
+ expect ( app . _store . getState ( ) . count ) . toEqual ( 2 ) ;
443
+ done ( ) ;
444
+ } , 2000 ) ;
445
+ } ) ;
446
+
447
+ it ( 'type: poll and stop' , done => {
448
+ const app = create ( ) ;
449
+ app . model ( {
450
+ namespace : 'count' ,
451
+ state : 0 ,
452
+ reducers : {
453
+ add ( state , { payload } ) {
454
+ return state + payload || 1 ;
455
+ } ,
456
+ } ,
457
+ effects : {
458
+ pollAdd : [
459
+ function * ( _ , { put } ) {
460
+ yield put ( { type : 'add' , payload : 1 } ) ;
461
+ } ,
462
+ { type : 'poll' , delay : 1000 } ,
463
+ ] ,
464
+ } ,
465
+ } ) ;
466
+ app . start ( ) ;
467
+
468
+ app . _store . dispatch ( { type : 'count/pollAdd-start' } ) ;
469
+ // should work one time
470
+ app . _store . dispatch ( { type : 'count/pollAdd-stop' } ) ;
471
+
472
+ setTimeout ( ( ) => {
473
+ expect ( app . _store . getState ( ) . count ) . toEqual ( 1 ) ;
474
+ done ( ) ;
475
+ } , 200 ) ;
476
+ } ) ;
477
+
478
+ it ( 'type: poll with payload' , done => {
479
+ const app = create ( ) ;
480
+ app . model ( {
481
+ namespace : 'count' ,
482
+ state : 0 ,
483
+ reducers : {
484
+ add ( state , { payload } ) {
485
+ return state + payload || 1 ;
486
+ } ,
487
+ } ,
488
+ effects : {
489
+ pollAdd : [
490
+ function * ( { payload } , { put } ) {
491
+ yield put ( { type : 'add' , payload } ) ;
492
+ } ,
493
+ { type : 'poll' , delay : 1000 } ,
494
+ ] ,
495
+ } ,
496
+ } ) ;
497
+ app . start ( ) ;
498
+
499
+ app . _store . dispatch ( { type : 'count/pollAdd-start' , payload : 2 } ) ;
500
+
501
+ setTimeout ( ( ) => {
502
+ app . _store . dispatch ( { type : 'count/pollAdd-stop' } ) ;
503
+ expect ( app . _store . getState ( ) . count ) . toEqual ( 4 ) ;
504
+ done ( ) ;
505
+ } , 2000 ) ;
506
+ } ) ;
507
+
508
+ it ( 'type: poll, start many time' , done => {
509
+ const app = create ( ) ;
510
+ app . model ( {
511
+ namespace : 'count' ,
512
+ state : 0 ,
513
+ reducers : {
514
+ add ( state , { payload } ) {
515
+ return state + payload || 1 ;
516
+ } ,
517
+ } ,
518
+ effects : {
519
+ pollAdd : [
520
+ function * ( { payload } , { put } ) {
521
+ yield put ( { type : 'add' , payload } ) ;
522
+ } ,
523
+ { type : 'poll' , delay : 1000 } ,
524
+ ] ,
525
+ } ,
526
+ } ) ;
527
+ app . start ( ) ;
528
+
529
+ app . _store . dispatch ( { type : 'count/pollAdd-start' , payload : 2 } ) ;
530
+
531
+ setTimeout ( ( ) => {
532
+ // second start should not work
533
+ app . _store . dispatch ( { type : 'count/pollAdd-start' , payload : 3 } ) ;
534
+ app . _store . dispatch ( { type : 'count/pollAdd-stop' } ) ;
535
+ expect ( app . _store . getState ( ) . count ) . toEqual ( 6 ) ;
536
+ done ( ) ;
537
+ } , 3000 ) ;
538
+ } ) ;
539
+
540
+ it ( 'type: poll, start many time 2' , done => {
541
+ const app = create ( ) ;
542
+ app . model ( {
543
+ namespace : 'count' ,
544
+ state : 0 ,
545
+ reducers : {
546
+ add ( state , { payload } ) {
547
+ return state + payload || 1 ;
548
+ } ,
549
+ } ,
550
+ effects : {
551
+ pollAdd : [
552
+ function * ( _ , { put } ) {
553
+ yield put ( { type : 'add' , payload : 1 } ) ;
554
+ } ,
555
+ { type : 'poll' , delay : 1000 } ,
556
+ ] ,
557
+ } ,
558
+ } ) ;
559
+ app . start ( ) ;
560
+
561
+ app . _store . dispatch ( { type : 'count/pollAdd-start' } ) ;
562
+ // second start should not work
563
+ app . _store . dispatch ( { type : 'count/pollAdd-start' } ) ;
564
+
565
+ setTimeout ( ( ) => {
566
+ app . _store . dispatch ( { type : 'count/pollAdd-stop' } ) ;
567
+ expect ( app . _store . getState ( ) . count ) . toEqual ( 3 ) ;
568
+ done ( ) ;
569
+ } , 3000 ) ;
570
+ } ) ;
571
+
572
+ it ( 'type: poll, start and stop many time' , done => {
573
+ const app = create ( ) ;
574
+ app . model ( {
575
+ namespace : 'count' ,
576
+ state : 0 ,
577
+ reducers : {
578
+ add ( state , { payload } ) {
579
+ return state + payload || 1 ;
580
+ } ,
581
+ } ,
582
+ effects : {
583
+ pollAdd : [
584
+ function * ( _ , { put } ) {
585
+ yield put ( { type : 'add' , payload : 1 } ) ;
586
+ } ,
587
+ { type : 'poll' , delay : 1000 } ,
588
+ ] ,
589
+ } ,
590
+ } ) ;
591
+ app . start ( ) ;
592
+
593
+ app . _store . dispatch ( { type : 'count/pollAdd-start' } ) ;
594
+ app . _store . dispatch ( { type : 'count/pollAdd-stop' } ) ;
595
+ app . _store . dispatch ( { type : 'count/pollAdd-start' } ) ;
596
+
597
+ setTimeout ( ( ) => {
598
+ app . _store . dispatch ( { type : 'count/pollAdd-stop' } ) ;
599
+ expect ( app . _store . getState ( ) . count ) . toEqual ( 3 ) ;
600
+ done ( ) ;
601
+ } , 2000 ) ;
602
+ } ) ;
603
+
417
604
xit ( 'nonvalid type' , ( ) => {
418
605
const app = create ( ) ;
419
606
app . model ( {
0 commit comments