@@ -568,6 +568,92 @@ describe("router dataStrategy", () => {
568
568
child : "CHILD" ,
569
569
} ) ;
570
570
} ) ;
571
+
572
+ it ( "does not short circuit when there are no matchesToLoad" , async ( ) => {
573
+ let dataStrategy = mockDataStrategy ( async ( { matches } ) => {
574
+ let results = await Promise . all (
575
+ matches . map ( ( m ) => m . resolve ( ( handler ) => handler ( ) ) )
576
+ ) ;
577
+ // Don't use keyedResults since it checks for shouldLoad and this test
578
+ // is always loading
579
+ return results . reduce (
580
+ ( acc , r , i ) => Object . assign ( acc , { [ matches [ i ] . route . id ] : r } ) ,
581
+ { }
582
+ ) ;
583
+ } ) ;
584
+ let t = setup ( {
585
+ routes : [
586
+ {
587
+ path : "/" ,
588
+ } ,
589
+ {
590
+ id : "parent" ,
591
+ path : "/parent" ,
592
+ loader : true ,
593
+ children : [
594
+ {
595
+ id : "child" ,
596
+ path : "child" ,
597
+ loader : true ,
598
+ } ,
599
+ ] ,
600
+ } ,
601
+ ] ,
602
+ dataStrategy,
603
+ } ) ;
604
+
605
+ let A = await t . navigate ( "/parent" ) ;
606
+ await A . loaders . parent . resolve ( "PARENT1" ) ;
607
+ expect ( A . loaders . parent . stub ) . toHaveBeenCalled ( ) ;
608
+ expect ( t . router . state . loaderData ) . toEqual ( {
609
+ parent : "PARENT1" ,
610
+ } ) ;
611
+ expect ( dataStrategy . mock . calls [ 0 ] [ 0 ] . matches ) . toEqual ( [
612
+ expect . objectContaining ( {
613
+ route : expect . objectContaining ( {
614
+ id : "parent" ,
615
+ } ) ,
616
+ } ) ,
617
+ ] ) ;
618
+
619
+ let B = await t . navigate ( "/parent/child" ) ;
620
+ await B . loaders . parent . resolve ( "PARENT2" ) ;
621
+ await B . loaders . child . resolve ( "CHILD" ) ;
622
+ expect ( B . loaders . parent . stub ) . toHaveBeenCalled ( ) ;
623
+ expect ( B . loaders . child . stub ) . toHaveBeenCalled ( ) ;
624
+ expect ( t . router . state . loaderData ) . toEqual ( {
625
+ parent : "PARENT2" ,
626
+ child : "CHILD" ,
627
+ } ) ;
628
+ expect ( dataStrategy . mock . calls [ 1 ] [ 0 ] . matches ) . toEqual ( [
629
+ expect . objectContaining ( {
630
+ route : expect . objectContaining ( {
631
+ id : "parent" ,
632
+ } ) ,
633
+ } ) ,
634
+ expect . objectContaining ( {
635
+ route : expect . objectContaining ( {
636
+ id : "child" ,
637
+ } ) ,
638
+ } ) ,
639
+ ] ) ;
640
+
641
+ let C = await t . navigate ( "/parent" ) ;
642
+ await C . loaders . parent . resolve ( "PARENT3" ) ;
643
+ expect ( C . loaders . parent . stub ) . toHaveBeenCalled ( ) ;
644
+ expect ( t . router . state . loaderData ) . toEqual ( {
645
+ parent : "PARENT3" ,
646
+ } ) ;
647
+ expect ( dataStrategy . mock . calls [ 2 ] [ 0 ] . matches ) . toEqual ( [
648
+ expect . objectContaining ( {
649
+ route : expect . objectContaining ( {
650
+ id : "parent" ,
651
+ } ) ,
652
+ } ) ,
653
+ ] ) ;
654
+
655
+ expect ( dataStrategy ) . toHaveBeenCalledTimes ( 3 ) ;
656
+ } ) ;
571
657
} ) ;
572
658
573
659
describe ( "actions" , ( ) => {
0 commit comments