我有一个非常简单的测试,基本上我试图模拟i18next的t函数:
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'));
});
和CCD_ 1实现:
import { t } from 'i18next';
export const changeDocumentTitle = (titleKey: string): void => {
document.title = t(`${titleKey}`);
};
不幸的是,测试失败了。但如果我把它从beforeAll
改为beforeEach
,一切都很好。怎么了?为什么beforeAll
没有应用与beforeEach
不同的mock?
提前谢谢。
由于react脚本v4,它添加了默认的jest-configresetMocks: true
:https://github.com/facebook/create-react-app/releases/tag/v4.0.0
这意味着在使用beforeAll
运行测试之前,将重置mock。我建议保留resetMocks: true
,因为测试应该隔离。