GOOGLE ADS

четверг, 14 апреля 2022 г.

i18n.exists не является функцией при тестировании с помощью библиотеки jest / react-testing.

Я использую библиотеку тестирования реакции вместе с 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 }
})

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

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...