@@ -3,22 +3,38 @@ import { render as defaultRender, screen } from '@testing-library/react';
33import TabNavigation from '../TabNavigation' ;
44import '@testing-library/jest-dom' ;
55
6- // Create a mock i18n instance - MOVED UP before any uses
7- const mockI18n = {
8- t : ( key : string , options ?: Record < string , unknown > ) => options ?. defaultValue || key ,
9- language : 'en' ,
10- languages : [ 'en' ] ,
11- use : ( ) => mockI18n , // Return itself for chaining
12- init : ( ) => mockI18n , // Return itself for chaining
13- changeLanguage : vi . fn ( ) ,
14- exists : vi . fn ( ( ) => true ) ,
15- addResourceBundle : vi . fn ( ) ,
16- } ;
6+ // vi.mock calls must come before any variable they reference
7+ // All mocks are hoisted to the top, so we need to define them before they're used
178
189// Mock i18next
19- vi . mock ( 'i18next' , ( ) => ( {
20- default : mockI18n ,
21- } ) ) ;
10+ vi . mock ( 'i18next' , ( ) => {
11+ return {
12+ default : {
13+ t : ( key : string , options ?: Record < string , unknown > ) => options ?. defaultValue || key ,
14+ language : 'en' ,
15+ languages : [ 'en' ] ,
16+ use : ( ) => ( {
17+ t : ( key : string , options ?: Record < string , unknown > ) => options ?. defaultValue || key ,
18+ language : 'en' ,
19+ languages : [ 'en' ] ,
20+ changeLanguage : vi . fn ( ) ,
21+ exists : vi . fn ( ( ) => true ) ,
22+ addResourceBundle : vi . fn ( ) ,
23+ } ) ,
24+ init : ( ) => ( {
25+ t : ( key : string , options ?: Record < string , unknown > ) => options ?. defaultValue || key ,
26+ language : 'en' ,
27+ languages : [ 'en' ] ,
28+ changeLanguage : vi . fn ( ) ,
29+ exists : vi . fn ( ( ) => true ) ,
30+ addResourceBundle : vi . fn ( ) ,
31+ } ) ,
32+ changeLanguage : vi . fn ( ) ,
33+ exists : vi . fn ( ( ) => true ) ,
34+ addResourceBundle : vi . fn ( ) ,
35+ } ,
36+ } ;
37+ } ) ;
2238
2339// Mock i18next-browser-languagedetector
2440vi . mock ( 'i18next-browser-languagedetector' , ( ) => ( {
@@ -36,9 +52,18 @@ vi.mock('react-i18next', () => ({
3652 I18nextProvider : ( { children } : { children : React . ReactNode } ) => < > { children } </ > ,
3753} ) ) ;
3854
39- // Mock common/utils/i18n
55+ // Mock common/utils/i18n using factory function that doesn't depend on mockI18n
4056vi . mock ( 'common/utils/i18n' , ( ) => ( {
41- default : mockI18n ,
57+ default : {
58+ t : ( key : string , options ?: Record < string , unknown > ) => options ?. defaultValue || key ,
59+ language : 'en' ,
60+ languages : [ 'en' ] ,
61+ use : vi . fn ( ) . mockReturnThis ( ) ,
62+ init : vi . fn ( ) . mockReturnThis ( ) ,
63+ changeLanguage : vi . fn ( ) ,
64+ exists : vi . fn ( ( ) => true ) ,
65+ addResourceBundle : vi . fn ( ) ,
66+ } ,
4267} ) ) ;
4368
4469// Mock the window object for Ionic
0 commit comments