Testing components with next-i18next can fail if translation config is not loaded in Jest. For most unit tests, the easiest path is mocking translation hooks.
Why mocking helps
In unit tests, you usually want to test UI logic, not translation framework internals.
Mocking useTranslation keeps tests fast and predictable.
Basic mock example
jest.mock('next-i18next', () => ({
useTranslation: () => ({
t: (key: string) => key,
i18n: { language: 'en' },
}),
}));
Now calling t('common.submit') returns the key string, which is enough for many tests.
Component test example
it('renders translated label key', () => {
render(<SubmitButton />);
expect(screen.getByText('common.submit')).toBeInTheDocument();
});
This confirms your component asks for the correct translation key.
Global setup option
If many files need this, put mock in jest.setup.ts and avoid repeating it.
Also ensure in Jest config:
setupFilesAfterEnv: ['<rootDir>/jest.setup.ts']
When not to mock
If you want to test language switching integration, you may need a more complete i18n setup with real resources.
Use full setup only in integration tests, not every unit test.