import { Text, ActivityIndicator } from 'react-native'; import React from 'react'; import { fireEvent, render, act } from '@testing-library/react-native'; import TabBar from '../TabBar'; describe('TabBar', () => { jest.useFakeTimers(); const LazyView = ({ content }) => { const [isLoading, setIsLoading] = React.useState(true); React.useEffect(() => { setTimeout(() => { setIsLoading(false); }, 3000); }); return isLoading ? : {content}; }; const Example = () => { const [selectedIndex, setSelectedIndex] = React.useState(0); return ( setSelectedIndex(index)}> Tab 1}> Tab 2}> Tab 3}> ); }; it('should load the first tab by default', () => { const { queryByText, queryByHintText } = render(); expect(queryByHintText('loading')).toBeTruthy(); expect(queryByText('Content 1')).toBeFalsy(); act(() => jest.runAllTimers()); expect(queryByHintText('loading')).toBeFalsy(); expect(queryByText('Content 1')).toBeTruthy(); expect(queryByText('Content 2')).toBeFalsy(); expect(queryByText('Content 3')).toBeFalsy(); }); it('should not load one tab twice', () => { const { queryByText, queryByHintText, getByText } = render(); act(() => jest.runAllTimers()); fireEvent.press(getByText('Tab 2')); expect(queryByHintText('loading')).toBeTruthy(); expect(queryByText('Content 2')).toBeFalsy(); act(() => jest.runAllTimers()); expect(queryByHintText('loading')).toBeFalsy(); expect(queryByText('Content 1')).toBeTruthy(); expect(queryByText('Content 2')).toBeTruthy(); expect(queryByText('Content 3')).toBeFalsy(); fireEvent.press(getByText('Tab 1')); expect(queryByHintText('loading')).toBeFalsy(); }); });