@@ -475,8 +475,18 @@ const SettingsNavigator = createStackNavigator({
475475
476476export const TabNavigator = createBottomTabNavigator ({
477477 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+ },
480490 },
481491 screenOptions: {
482492 headerShown: false ,
@@ -544,8 +554,16 @@ const Tab = createBottomTabNavigator();
544554export function TabNavigator () {
545555 return (
546556 < 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+ / >
549567 < / Tab .Navigator >
550568 );
551569}
@@ -558,96 +576,77 @@ export function TabNavigator() {
558576<TabItem value =" static " label =" Static " default >
559577
560578``` js
561- import { expect , jest , test } from ' @jest/globals' ;
579+ import { expect , test } from ' @jest/globals' ;
562580import { 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' ;
564582
565583import { TabNavigator } from ' ./TabNavigator' ;
566584
567585test (' always displays settings screen after settings tab bar button press' , () => {
568- jest .useFakeTimers ();
569-
570586 const TabNavigation = createStaticNavigation (TabNavigator);
571587 render (< TabNavigation / > );
572588
573- const homeTabButton = screen .getByRole (' button' , {
574- name: ' Home, tab, 1 of 2' ,
575- });
589+ const homeTabButton = screen .getByTestId (' homeTabBarButton' );
576590
577- const settingsTabButton = screen .getByRole (' button' , {
578- name: ' SettingsStack, tab, 2 of 2' ,
579- });
591+ const settingsTabButton = screen .getByTestId (' settingsTabBarButton' );
580592
581593 const event = {};
582594
583595 fireEvent .press (settingsTabButton, event );
584- act (() => jest .runAllTimers ());
585- expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
596+ expect (screen .getByText (' Settings screen' )).toBeOnTheScreen ();
586597
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 ();
590600
591601 fireEvent .press (homeTabButton, event );
592- act (() => jest .runAllTimers ());
593- expect (screen .queryByText (' Home screen' )).toBeOnTheScreen ();
602+ expect (screen .getByText (' Home screen' )).toBeOnTheScreen ();
594603
595604 fireEvent .press (settingsTabButton, event );
596- act (() => jest .runAllTimers ());
597- expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
605+ expect (screen .getByText (' Settings screen' )).toBeOnTheScreen ();
598606});
599607```
600608
601609</TabItem >
602610<TabItem value =" dynamic " label =" Dynamic " >
603611
604612``` js
605- import { expect , jest , test } from ' @jest/globals' ;
613+ import { expect , test } from ' @jest/globals' ;
606614import { 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' ;
608616
609617import { TabNavigator } from ' ./TabNavigator' ;
610618
611619test (' always displays settings screen after settings tab bar button press' , () => {
612- jest .useFakeTimers ();
613-
614620 render (
615621 < NavigationContainer>
616622 < TabNavigator / >
617623 < / NavigationContainer>
618624 );
619625
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' );
626629
627630 const event = {};
628631
629632 fireEvent .press (settingsTabButton, event );
630- act (() => jest .runAllTimers ());
631- expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
633+ expect (screen .getByText (' Settings screen' )).toBeOnTheScreen ();
632634
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 ();
636637
637638 fireEvent .press (homeTabButton, event );
638- act (() => jest .runAllTimers ());
639- expect (screen .queryByText (' Home screen' )).toBeOnTheScreen ();
639+ expect (screen .getByText (' Home screen' )).toBeOnTheScreen ();
640640
641641 fireEvent .press (settingsTabButton, event );
642- act (() => jest .runAllTimers ());
643- expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
642+ expect (screen .getByText (' Settings screen' )).toBeOnTheScreen ();
644643});
645644```
646645
647646</TabItem >
648647</Tabs >
649648
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.
651650
652651### Example 4
653652
0 commit comments