Как правильно издеваться над i18next

#reactjs #jestjs #enzyme #react-i18next

#reactjs #jestjs #фермент #реагировать-i18next

Вопрос:

Вот упрощенная версия как моей функции, так и теста. Хотя я издевался над useTranslation, я получаю следующую ошибку:

Вы передаете неопределенный модуль! Пожалуйста, проверьте объект, который вы передаете в i18next.use()

    7 | i18n
   8 |   .use(Backend)
>  9 |   .use(initReactI18next)
  

Как мне правильно издеваться, чтобы избавиться от этой ошибки?

 import React from 'react'
import { useTranslation } from 'react-i18next'
import * as Constants from 'constants'
import MyComponent from 'components'

const Dashboard = () => {
  const { t } = useTranslation('dashboard')
  return (
     <div> Dashboard 
      <MyComponent name={t(Constants.MYCOMPONENT)}/>
    </div>
  )
}

export default Dashboard
  
 jest.mock('react-i18next', () => ({
  useTranslation: () => ({ t: (key) => key })
}))
it('Render Dashboard without crash', () => {
  const div = document.createElement('div')
  ReactDOM.render(<Dashboard/>, div)

})
  

Комментарии:

1. Вы когда-нибудь разбирались с этим, я застрял с той же проблемой.

Ответ №1:

Единственным способом, которым я мог заставить это работать для нашей установки, было следующее:

 jest.mock("react-i18next", () => ({
    initReactI18next: { type: "3rdParty", init: jest.fn() },
    useTranslation: () => ({ t: (key: string) => key }),
    Trans: ({ children }: { children: React.ReactNode }) => children,
}));
  

С initReactI18next: { type: "3rdParty", init: jest.fn() },

Будучи последней частью головоломки, как указано здесь

Ответ №2:

Нет необходимости издеваться i18next , эта библиотека поддерживает cimode , которая всегда будет возвращать переданный ключ.

Чтобы включить его, все, что вам нужно сделать, это передать cimode как lang в конфигурации.

В настройках среды тестирования измените язык на cimode :

 await i18next.changeLanguage('cimode');

// from now all calls to `t('MY_TARANSLATION_KEY')` 
// will return the key (in this case `MY_TARANSLATION_KEY`)
  

Комментарии:

1. Пожалуйста, не могли бы вы подробнее остановиться на этом, с примерами кода, если это возможно. Я не понимаю, где это должно быть установлено в отношении тестов. Я перешел по ссылке cimode , но мне все еще было непонятно.