@@ -589,6 +589,55 @@ describe('React Navigation - TTID', () => {
589
589
} ) ;
590
590
} ) ;
591
591
592
+ describe ( 'ttid for preloaded/seen routes' , ( ) => {
593
+ beforeEach ( ( ) => {
594
+ jest . useFakeTimers ( ) ;
595
+ ( notWeb as jest . Mock ) . mockReturnValue ( true ) ;
596
+ ( isHermesEnabled as jest . Mock ) . mockReturnValue ( true ) ;
597
+ } ) ;
598
+
599
+ afterEach ( ( ) => {
600
+ jest . useRealTimers ( ) ;
601
+ } ) ;
602
+
603
+ it ( 'should add ttid span and measurement for already seen route' , ( ) => {
604
+ const sut = createTestedInstrumentation ( {
605
+ enableTimeToInitialDisplay : true ,
606
+ ignoreEmptyBackNavigationTransactions : false ,
607
+ enableTimeToInitialDisplayForPreloadedRoutes : true ,
608
+ } ) ;
609
+ transportSendMock = initSentry ( sut ) . transportSendMock ;
610
+
611
+ mockedNavigation = createMockNavigationAndAttachTo ( sut ) ;
612
+
613
+ jest . runOnlyPendingTimers ( ) ; // Flush app start transaction
614
+ mockedNavigation . navigateToNewScreen ( ) ;
615
+ jest . runOnlyPendingTimers ( ) ; // Flush navigation transaction
616
+ mockedNavigation . navigateToInitialScreen ( ) ;
617
+ mockedEventEmitter . emitNewFrameEvent ( ) ;
618
+ jest . runOnlyPendingTimers ( ) ; // Flush navigation transaction
619
+
620
+ const transaction = getLastTransaction ( transportSendMock ) ;
621
+ expect ( transaction ) . toEqual (
622
+ expect . objectContaining < TransactionEvent > ( {
623
+ type : 'transaction' ,
624
+ spans : expect . arrayContaining ( [
625
+ expect . objectContaining < Partial < SpanJSON > > ( {
626
+ op : 'ui.load.initial_display' ,
627
+ description : 'Initial Screen initial display' ,
628
+ } ) ,
629
+ ] ) ,
630
+ measurements : expect . objectContaining < Required < TransactionEvent > [ 'measurements' ] > ( {
631
+ time_to_initial_display : {
632
+ value : expect . any ( Number ) ,
633
+ unit : 'millisecond' ,
634
+ } ,
635
+ } ) ,
636
+ } ) ,
637
+ ) ;
638
+ } ) ;
639
+ } ) ;
640
+
592
641
function getSpanDurationMs ( transaction : TransactionEvent , op : string ) : number | undefined {
593
642
const ttidSpan = transaction . spans ?. find ( span => span . op === op ) ;
594
643
if ( ! ttidSpan ) {
@@ -603,10 +652,13 @@ describe('React Navigation - TTID', () => {
603
652
return ( spanJSON . timestamp - spanJSON . start_timestamp ) * 1000 ;
604
653
}
605
654
606
- function createTestedInstrumentation ( options ?: { enableTimeToInitialDisplay ?: boolean } ) {
655
+ function createTestedInstrumentation ( options ?: {
656
+ enableTimeToInitialDisplay ?: boolean
657
+ enableTimeToInitialDisplayForPreloadedRoutes ?: boolean
658
+ ignoreEmptyBackNavigationTransactions ?: boolean
659
+ } ) {
607
660
const sut = Sentry . reactNavigationIntegration ( {
608
661
...options ,
609
- ignoreEmptyBackNavigationTransactions : true , // default true
610
662
} ) ;
611
663
return sut ;
612
664
}
0 commit comments