@@ -475,8 +475,18 @@ const SettingsNavigator = createStackNavigator({
475
475
476
476
export const TabNavigator = createBottomTabNavigator ({
477
477
screens: {
478
- Home: HomeScreen,
479
- SettingsStack: SettingsNavigator,
478
+ Home: {
479
+ screen : HomeScreen,
480
+ options: {
481
+ tabBarButtonTestID: ' homeTabBarButton' ,
482
+ },
483
+ },
484
+ SettingsStack: {
485
+ screen : SettingsNavigator,
486
+ options: {
487
+ tabBarButtonTestID: ' settingsTabBarButton' ,
488
+ },
489
+ },
480
490
},
481
491
screenOptions: {
482
492
headerShown: false ,
@@ -544,8 +554,16 @@ const Tab = createBottomTabNavigator();
544
554
export function TabNavigator () {
545
555
return (
546
556
< Tab .Navigator screenOptions= {{ headerShown: false }}>
547
- < Tab .Screen name= " Home" component= {HomeScreen} / >
548
- < Tab .Screen name= " SettingsStack" component= {SettingsStackScreen} / >
557
+ < Tab .Screen
558
+ name= " Home"
559
+ component= {HomeScreen}
560
+ options= {{ tabBarButtonTestID: ' homeTabBarButton' }}
561
+ / >
562
+ < Tab .Screen
563
+ name= " SettingsStack"
564
+ component= {SettingsStackScreen}
565
+ options= {{ tabBarButtonTestID: ' settingsTabBarButton' }}
566
+ / >
549
567
< / Tab .Navigator >
550
568
);
551
569
}
@@ -558,96 +576,77 @@ export function TabNavigator() {
558
576
<TabItem value =" static " label =" Static " default >
559
577
560
578
``` js
561
- import { expect , jest , test } from ' @jest/globals' ;
579
+ import { expect , test } from ' @jest/globals' ;
562
580
import { createStaticNavigation } from ' @react-navigation/native' ;
563
- import { act , fireEvent , render , screen } from ' @testing-library/react-native' ;
581
+ import { fireEvent , render , screen } from ' @testing-library/react-native' ;
564
582
565
583
import { TabNavigator } from ' ./TabNavigator' ;
566
584
567
585
test (' always displays settings screen after settings tab bar button press' , () => {
568
- jest .useFakeTimers ();
569
-
570
586
const TabNavigation = createStaticNavigation (TabNavigator);
571
587
render (< TabNavigation / > );
572
588
573
- const homeTabButton = screen .getByRole (' button' , {
574
- name: ' Home, tab, 1 of 2' ,
575
- });
589
+ const homeTabButton = screen .getByTestId (' homeTabBarButton' );
576
590
577
- const settingsTabButton = screen .getByRole (' button' , {
578
- name: ' SettingsStack, tab, 2 of 2' ,
579
- });
591
+ const settingsTabButton = screen .getByTestId (' settingsTabBarButton' );
580
592
581
593
const event = {};
582
594
583
595
fireEvent .press (settingsTabButton, event );
584
- act (() => jest .runAllTimers ());
585
- expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
596
+ expect (screen .getByText (' Settings screen' )).toBeOnTheScreen ();
586
597
587
- fireEvent .press (screen .queryByText (' Go to Details' ), event );
588
- act (() => jest .runAllTimers ());
589
- expect (screen .queryByText (' Details screen' )).toBeOnTheScreen ();
598
+ fireEvent .press (screen .getByText (' Go to Details' ), event );
599
+ expect (screen .getByText (' Details screen' )).toBeOnTheScreen ();
590
600
591
601
fireEvent .press (homeTabButton, event );
592
- act (() => jest .runAllTimers ());
593
- expect (screen .queryByText (' Home screen' )).toBeOnTheScreen ();
602
+ expect (screen .getByText (' Home screen' )).toBeOnTheScreen ();
594
603
595
604
fireEvent .press (settingsTabButton, event );
596
- act (() => jest .runAllTimers ());
597
- expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
605
+ expect (screen .getByText (' Settings screen' )).toBeOnTheScreen ();
598
606
});
599
607
```
600
608
601
609
</TabItem >
602
610
<TabItem value =" dynamic " label =" Dynamic " >
603
611
604
612
``` js
605
- import { expect , jest , test } from ' @jest/globals' ;
613
+ import { expect , test } from ' @jest/globals' ;
606
614
import { NavigationContainer } from ' @react-navigation/native' ;
607
- import { act , fireEvent , render , screen } from ' @testing-library/react-native' ;
615
+ import { fireEvent , render , screen } from ' @testing-library/react-native' ;
608
616
609
617
import { TabNavigator } from ' ./TabNavigator' ;
610
618
611
619
test (' always displays settings screen after settings tab bar button press' , () => {
612
- jest .useFakeTimers ();
613
-
614
620
render (
615
621
< NavigationContainer>
616
622
< TabNavigator / >
617
623
< / NavigationContainer>
618
624
);
619
625
620
- const homeTabButton = screen .getByRole (' button' , {
621
- name: ' Home, tab, 1 of 2' ,
622
- });
623
- const settingsTabButton = screen .getByRole (' button' , {
624
- name: ' SettingsStack, tab, 2 of 2' ,
625
- });
626
+ const homeTabButton = screen .getByTestId (' homeTabBarButton' );
627
+
628
+ const settingsTabButton = screen .getByTestId (' settingsTabBarButton' );
626
629
627
630
const event = {};
628
631
629
632
fireEvent .press (settingsTabButton, event );
630
- act (() => jest .runAllTimers ());
631
- expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
633
+ expect (screen .getByText (' Settings screen' )).toBeOnTheScreen ();
632
634
633
- fireEvent .press (screen .queryByText (' Go to Details' ), event );
634
- act (() => jest .runAllTimers ());
635
- expect (screen .queryByText (' Details screen' )).toBeOnTheScreen ();
635
+ fireEvent .press (screen .getByText (' Go to Details' ), event );
636
+ expect (screen .getByText (' Details screen' )).toBeOnTheScreen ();
636
637
637
638
fireEvent .press (homeTabButton, event );
638
- act (() => jest .runAllTimers ());
639
- expect (screen .queryByText (' Home screen' )).toBeOnTheScreen ();
639
+ expect (screen .getByText (' Home screen' )).toBeOnTheScreen ();
640
640
641
641
fireEvent .press (settingsTabButton, event );
642
- act (() => jest .runAllTimers ());
643
- expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
642
+ expect (screen .getByText (' Settings screen' )).toBeOnTheScreen ();
644
643
});
645
644
```
646
645
647
646
</TabItem >
648
647
</Tabs >
649
648
650
- We query tab bar buttons, press buttons and check if rendered screens are correct.
649
+ We get tab bar buttons, press buttons and check if rendered screens are correct.
651
650
652
651
### Example 4
653
652
0 commit comments