Eu tenho o seguinte método que gostaria de testar Jest
(bem, mais precisamente com vitest
):
export const handleSave = async (
dispatch: React.Dispatch<DeveloperAction>,
e: FormEvent<HTMLFormElement>,
handleClose: () => void,
setErrorMessage: (errorMessage: string) => void) => {
e.preventDefault();
const formData: FormData = new FormData(e.currentTarget)
const developer: DeveloperType = toDeveloperType(formData)
try {
const resp: AxiosResponse = await axios({
method: 'PUT',
url: `${endpointBackEnd}/developers/${formData.get('id')}`,
data: developer
});
dispatch({
type: DEVELOPER_ACTION_TYPES.EDIT,
payload: resp.data
})
handleClose();
} catch (err) {
handleError(err, setErrorMessage)
}
}
Minha dúvida é sobre como passar um FormEvent
que a função pode usar para criar um FormData
que posteriormente será usado para extrair informações?
Devo passar um FormEvent simulado (como posso fazer isso)? Ou crie uma instância de FormEvent (a pergunta é a mesma, como fazer isso, por favor?)
Obrigado pela ajuda!
Existem três pontos que você precisa pensar para o FormEvent:
e.preventDefault();
- use uma função de brincadeira para zombar dissoe.currentTarget
- certifique-se de que a classe HTMLFormElement correta seja passada para o eventoformData.get('id')
- construa seu formulário usando.name
e.value
de campos de entrada no formulário virtual.Opção 1. Use JSDom para simular o FormData
Opção 2. Teste isolado do DOM
Esta resposta fornece o método para zombar da classe FormData de brincadeira: https://stackoverflow.com/a/59726560/4529555