@@ -414,6 +414,193 @@ describe('effects', () => {
414414 } , 200 ) ;
415415 } ) ;
416416
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+
417604 xit ( 'nonvalid type' , ( ) => {
418605 const app = create ( ) ;
419606 app . model ( {
0 commit comments