Я использую библиотеку тестирования реакции вместе с Jest. Я не могу издеваться над существующей функцией в тестовом скрипте.
Ниже мой код.
errorComponent.js
import { useTranslation } from "react-i18next";
export default function Error(props) {
const { t, i18n } = useTranslation();
return (
<div>
{i18n.exists(props.errorText)? t(props.errorText): props.errorText}
</div>
)
}
myComponent.js
import { useTranslation } from "react-i18next";
export default function Error(props) {
return (
<div>
<Input value="" id="testig-input"/>
<Error
errorText={'XYZ'}
/>
</div>
)
}
мойTestFile.test.js
const temp= document.querySelector(`input[id='testig-input']`);
fireEvent.change(temp, { target: { value: '' } });
Когда я пытаюсь выполнить это, я получаю сообщение об ошибке, говорящее, что «i18n.exists не является функцией». Я пытался издеваться, но это не работает. Кто-нибудь, пожалуйста, помогите мне удалить это.
Решение проблемы
В вашем коде у вас должна быть <I18nextProvider>обертка всего, что где-то переводится. Когда вы запускаете шуточный тест, вам нужно отрендерить компонент, обернутый таким же образом:
render(
<I18nextProvider i18n={myConfig}>
<MyComponent />
</I18nextProvider>
)
В качестве альтернативы можно попытаться existsимитировать функцию, но лучше более точно имитировать то, как на самом деле работает ваше приложение.
import * as i18next from "react-i18next";
jest.spyOn(118next, 'useTranslation').mockReturnValue({
t: (val) => val,
i18n: { exists: () => true }
})
Комментариев нет:
Отправить комментарий