Tengo una prueba bastante simple, básicamente estoy tratando de burlarme de la función t de i18next:
import { t } from 'i18next'; import { changeDocumentTitle } from './utils'; jest.mock('i18next'); const tMock = (key: string): string => key; beforeAll(() => { (t as jest.Mock).mockImplementation(tMock); }); test('test changeDocumentTitle function', () => { changeDocumentTitle('string'); expect(document.title).toEqual(tMock('string')); }); y la implementación de changeDocumentTitle :
import { t } from 'i18next'; export const changeDocumentTitle = (titleKey: string): void => { document.title = t(`${titleKey}`); }; Desafortunadamente, la prueba falla. Pero si lo cambio de beforeAll a beforeEach , todo está bien. ¿Como es eso? ¿Por qué beforeAll no está aplicando mi simulacro a diferencia de beforeEach ?
Gracias por adelantado.
Desde react-scripts v4, agregó la configuración predeterminada de jest resetMocks: true : https://github.com/facebook/create-react-app/releases/tag/v4.0.0
Esto significa que los simulacros se restablecen antes de que se ejecuten las pruebas con beforeAll . Recomendé mantener resetMocks: true , porque las pruebas deben estar aisladas.