在JEST中模拟i18n的useTranslation无法正常工作

时间:2019-05-23 00:27:45

标签: typescript jestjs i18next react-i18next ts-jest

我的react组件使用i18next的翻译,我正在尝试使用JEST为其创建测试。但是,什么都没有得到翻译,我已经尝试过模仿下面的useTranslation函数:

const useMock : any = [(k: any) => k, {}];
useMock.t = (k: any) => k;
useMock.i18n = {};

jest.mock('react-i18next', () => ({
  // this mock makes sure any components using the translate HoC receive the t function as a prop
  /* tslint:disable-next-line:variable-name */
  useTranslation: () => useMock,
}));

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

jest.mock('react-i18next', () => {
  return {
    useTranslation: () => ({
      t: key => key
    })
  }
})

答案 1 :(得分:0)

创建文件 __mocks__/react-i18next.js (位于同一父文件夹中__mocks__旁边的文件夹node_modules),包含:

module.exports = {
  useTranslation: () => ({
    t: key => key,
  }),
}

在测试脚本中,通常会导入useTranslation,但要定义要使用的模拟。

import {useTranslation} from 'react-i18next'
/* Other imports and code */

jest.mock('react-i18next')
/* Your test code using useTranslation */