#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
, но мне все еще было непонятно.