@@ -302,12 +302,11 @@ test('navigates to settings by tab bar button press', () => {
302
302
const TabNavigation = createStaticNavigation (TabNavigator);
303
303
render (< TabNavigation / > );
304
304
305
- act (() => jest .runAllTimers ());
306
-
307
305
const button = screen .getByRole (' button' , { name: ' Settings, tab, 2 of 2' });
308
306
309
307
const event = {};
310
308
fireEvent .press (button, event );
309
+ act (() => jest .runAllTimers ());
311
310
312
311
expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
313
312
});
@@ -332,12 +331,11 @@ test('navigates to settings by tab bar button press', () => {
332
331
< / NavigationContainer>
333
332
);
334
333
335
- act (() => jest .runAllTimers ());
336
-
337
334
const button = screen .getByRole (' button' , { name: ' Settings, tab, 2 of 2' });
338
335
339
336
const event = {};
340
337
fireEvent .press (button, event );
338
+ act (() => jest .runAllTimers ());
341
339
342
340
expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
343
341
});
@@ -363,10 +361,7 @@ const event = {};
363
361
fireEvent .press (button, event );
364
362
```
365
363
366
- Sometimes navigation animations need some time to finish and render screen's content. You need to wait until animations finish before querying components. Therefore, you have to use ` fake timers ` . [ ` Fake Timers ` ] ( https://jestjs.io/docs/timer-mocks ) replace real implementation of times function to use fake clock ticks. They allow you to instantly skip animation time and avoid getting state change error.
367
-
368
- <Tabs >
369
- <TabItem value =" static " label =" Static " >
364
+ Sometimes navigation animations need some time to finish. You need to wait until animations finish before querying components. Therefore, you have to use ` fake timers ` . [ ` Fake Timers ` ] ( https://jestjs.io/docs/timer-mocks ) replace real implementation of times function to use fake clock ticks. They allow you to instantly skip animations time and avoid getting state change error.
370
365
371
366
``` js
372
367
// Enable fake timers
@@ -378,16 +373,6 @@ jest.useFakeTimers();
378
373
act (() => jest .runAllTimers ());
379
374
```
380
375
381
- </TabItem >
382
- <TabItem value =" dynamic " label =" Dynamic " >
383
-
384
- ``` js
385
-
386
- ```
387
-
388
- </TabItem >
389
- </Tabs >
390
-
391
376
### Example 3
392
377
393
378
Always displays settings screen after tab bar settings button press.
@@ -533,22 +518,18 @@ export function TabNavigator() {
533
518
<TabItem value =" static " label =" Static " default >
534
519
535
520
``` js
536
- import ' @testing-library/react-native/extend-expect' ;
537
-
538
521
import { expect , jest , test } from ' @jest/globals' ;
539
522
import { createStaticNavigation } from ' @react-navigation/native' ;
540
523
import { act , fireEvent , render , screen } from ' @testing-library/react-native' ;
541
524
542
525
import { TabNavigator } from ' ./TabNavigator' ;
543
526
544
- test (' always displays settings screen after tab bar settings button press' , async () => {
527
+ test (' always displays settings screen after tab bar settings button press' , () => {
545
528
jest .useFakeTimers ();
546
529
547
530
const TabNavigation = createStaticNavigation (TabNavigator);
548
531
render (< TabNavigation / > );
549
532
550
- act (() => jest .runAllTimers ());
551
-
552
533
const homeTabButton = screen .getByRole (' button' , {
553
534
name: ' Home, tab, 1 of 2' ,
554
535
});
@@ -561,14 +542,18 @@ test('always displays settings screen after tab bar settings button press', asyn
561
542
562
543
fireEvent .press (settingsTabButton, event );
563
544
expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
545
+ act (() => jest .runAllTimers ());
564
546
565
547
fireEvent .press (screen .queryByText (' Go to Details' ), event );
548
+ act (() => jest .runAllTimers ());
566
549
expect (screen .queryByText (' Details screen' )).toBeOnTheScreen ();
567
550
568
551
fireEvent .press (homeTabButton, event );
552
+ act (() => jest .runAllTimers ());
569
553
expect (screen .queryByText (' Home screen' )).toBeOnTheScreen ();
570
554
571
555
fireEvent .press (settingsTabButton, event );
556
+ act (() => jest .runAllTimers ());
572
557
expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
573
558
});
574
559
```
@@ -577,15 +562,13 @@ test('always displays settings screen after tab bar settings button press', asyn
577
562
<TabItem value =" dynamic " label =" Dynamic " >
578
563
579
564
``` js
580
- import ' @testing-library/react-native/extend-expect' ;
581
-
582
565
import { expect , jest , test } from ' @jest/globals' ;
583
566
import { NavigationContainer } from ' @react-navigation/native' ;
584
567
import { act , fireEvent , render , screen } from ' @testing-library/react-native' ;
585
568
586
569
import { TabNavigator } from ' ./TabNavigator' ;
587
570
588
- test (' always displays settings screen after tab bar settings button press' , async () => {
571
+ test (' always displays settings screen after tab bar settings button press' , () => {
589
572
jest .useFakeTimers ();
590
573
591
574
render (
@@ -594,8 +577,6 @@ test('always displays settings screen after tab bar settings button press', asyn
594
577
< / NavigationContainer>
595
578
);
596
579
597
- act (() => jest .runAllTimers ());
598
-
599
580
const homeTabButton = screen .getByRole (' button' , {
600
581
name: ' Home, tab, 1 of 2' ,
601
582
});
@@ -606,15 +587,19 @@ test('always displays settings screen after tab bar settings button press', asyn
606
587
const event = {};
607
588
608
589
fireEvent .press (settingsTabButton, event );
590
+ act (() => jest .runAllTimers ());
609
591
expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
610
592
611
593
fireEvent .press (screen .queryByText (' Go to Details' ), event );
594
+ act (() => jest .runAllTimers ());
612
595
expect (screen .queryByText (' Details screen' )).toBeOnTheScreen ();
613
596
614
597
fireEvent .press (homeTabButton, event );
598
+ act (() => jest .runAllTimers ());
615
599
expect (screen .queryByText (' Home screen' )).toBeOnTheScreen ();
616
600
617
601
fireEvent .press (settingsTabButton, event );
602
+ act (() => jest .runAllTimers ());
618
603
expect (screen .queryByText (' Settings screen' )).toBeOnTheScreen ();
619
604
});
620
605
```
@@ -754,8 +739,6 @@ export function TabNavigator() {
754
739
<TabItem value =" static " label =" Static " default >
755
740
756
741
``` js
757
- import ' @testing-library/react-native/extend-expect' ;
758
-
759
742
import { expect , jest , test } from ' @jest/globals' ;
760
743
import { createStaticNavigation } from ' @react-navigation/native' ;
761
744
import { act , fireEvent , render , screen } from ' @testing-library/react-native' ;
@@ -783,8 +766,6 @@ test('Display loading state while waiting for data and then fetched profile nick
783
766
const TabNavigation = createStaticNavigation (TabNavigator);
784
767
render (< TabNavigation / > );
785
768
786
- act (() => jest .runAllTimers ());
787
-
788
769
const spy = jest .spyOn (window , ' fetch' ).mockImplementation (mockedFetch);
789
770
790
771
const homeTabButton = screen .getByRole (' button' , {
@@ -797,13 +778,15 @@ test('Display loading state while waiting for data and then fetched profile nick
797
778
798
779
const event = {};
799
780
fireEvent .press (profileTabButton, event );
781
+ act (() => jest .runAllTimers ());
800
782
801
783
expect (screen .queryByText (' Loading' )).toBeOnTheScreen ();
802
784
expect (spy).toHaveBeenCalled ();
803
785
expect (await screen .findByText (' CookieDough' )).toBeOnTheScreen ();
804
786
805
787
fireEvent .press (homeTabButton, event );
806
788
fireEvent .press (profileTabButton, event );
789
+ act (() => jest .runAllTimers ());
807
790
808
791
expect (screen .queryByText (' Loading' )).toBeOnTheScreen ();
809
792
expect (spy).toHaveBeenCalled ();
@@ -815,8 +798,6 @@ test('Display loading state while waiting for data and then fetched profile nick
815
798
<TabItem value =" dynamic " label =" Dynamic " >
816
799
817
800
``` js
818
- import ' @testing-library/react-native/extend-expect' ;
819
-
820
801
import { expect , jest , test } from ' @jest/globals' ;
821
802
import { NavigationContainer } from ' @react-navigation/native' ;
822
803
import { act , fireEvent , render , screen } from ' @testing-library/react-native' ;
@@ -847,8 +828,6 @@ test('Display loading state while waiting for data and then fetched profile nick
847
828
< / NavigationContainer>
848
829
);
849
830
850
- act (() => jest .runAllTimers ());
851
-
852
831
const spy = jest .spyOn (window , ' fetch' ).mockImplementation (mockedFetch);
853
832
854
833
const homeTabButton = screen .getByRole (' button' , {
@@ -860,13 +839,15 @@ test('Display loading state while waiting for data and then fetched profile nick
860
839
861
840
const event = {};
862
841
fireEvent .press (profileTabButton, event );
842
+ act (() => jest .runAllTimers ());
863
843
864
844
expect (screen .queryByText (' Loading' )).toBeOnTheScreen ();
865
845
expect (spy).toHaveBeenCalled ();
866
846
expect (await screen .findByText (' CookieDough' )).toBeOnTheScreen ();
867
847
868
848
fireEvent .press (homeTabButton, event );
869
849
fireEvent .press (profileTabButton, event );
850
+ act (() => jest .runAllTimers ());
870
851
871
852
expect (screen .queryByText (' Loading' )).toBeOnTheScreen ();
872
853
expect (spy).toHaveBeenCalled ();
0 commit comments