Учитывая следующую функцию:
. / Http. js
const http = {
refetch() {
return (component) => component;
}
}
Я хотел бы смоделировать функцию в тесте следующим образом:
. / __ tests __ / someTest. js
import { refetch } from './http';
jest.mock('./http', () => {
return {
refetch: jest.fn();
}
}
refetch.mockImplementation((component) => {
// doing some stuff
})
Но я получаю сообщение об ошибке
TypeError: _http.refetch.mockImplementation is not a function
Как я могу издеваться над функция refetch в данном примере?
обновление:
Когда я слегка изменяю функцию макета на:
jest.mock(
'../http',
() => ({ refetch: jest.fn() }),
);
Я получаю другая ошибка:
TypeError: (0 , _http.refetch)(...) is not a function
Я предполагаю, что это что-то с синтаксисом, когда карри функция (или функция HO C) не отображается должным образом. Но я не знаю, как ее решить.
Часть реального кода, который я пытаюсь протестировать.
Примечание: пример немного небрежный. Работает в приложении. Данный пример дает представление о работе.
. / SettingsContainer
// ...some code
return (
<FormComponent
settingsFetch={settingsFetch}
settingsPutResponse={settingsPutResponse}
/>
);
}
const ConnectedSettingsContainer = refetch(
({
match: { params: { someId } },
}) => ({
settingsFetch: {
url: 'https://some-url.com/api/v1/f',
},
settingsPut: (data) => ({
settingsPutResponse: {
url: 'https://some-url.com/api/v1/p',
}
}),
}),
)(SettingsContainer);
export default ConnectedSettingsContainer;
Затем в моем компоненте я получаю settingsPutResponse через реквизиты, которые реагировать-рефетч делает.
Я хочу проверить, может ли пользователь повторно отправить форму после того, как сервер ответил один или два раза 500, пока не вернется 204.
. / FormComponent
// ...code
const FormComp = ({ settingsResponse }) => {
const [success, setSuccess] = useState(false);
useEffect(() => {
if (settingsResponse && settingsResponse.fulfilled) {
setSuccess(true);
}
}, [settingsResponse]);
if (success) {
// state of the form wil be reset
}
return (
<form>
<label htmlFor"username">
<input type="text" id="username" />
<button type="submit">Save</button>
</form>
)
};