DEV Community

Discussion on: Testando lançamento de exceções com Jest

Collapse
 
fabimendes profile image
Fabi Mendes • Edited

Júnior, estou iniciando nos testes e talvez você possa me ajudar... Tenho uma função de login com try/catch que recebe um email e um password, se o e-mail e senha não batem ela exibe um alert na tela. Montei o teste para essa função, passando os parâmetros que o backend aceita, mas o teste quebra no catch. Vou colá-los aqui:

Função login:

"async function Login(loginData) {
try {
const response = await api.post('/user/login', loginData);
setUser(response.data);
localStorage.setItem('@App:user', JSON.stringify(response.data));
localStorage.setItem('@App:token', response.data.id);
api.defaults.headers.Authorization = Bearer ${response.data.id};
} catch(error) {
alert(Usuário ou senha inválidos!);
}
}"

Teste:

"describe('Login function', () => {
it('Set the user to logged', () => {
const TestComponent = () => {
const { Login, logged } = useAuth();
const loginData = {email:'teste@front.com', password:'teste123'};
return (
<>

{logged.toString()}

</>
);
}
render();
expect(screen.getByTestId('status')).toHaveTextContent('false')
fireEvent.click(screen.getByTestId('button'))
expect(screen.getByTestId('status')).toHaveTextContent('true')
})
});"

Sabe me dizer o que está errado? Agradeço demais o help, é muito difícil achar conteúdo sobre testes, principalmente para funções com providers..rsrs

Collapse
 
dotmendes profile image
Júnior Mendes

Oi Fabi, tudo bem? Percebi que nesse trecho que tu me mandou, não tem nenhum mock pra API do Axios. Isso foi apenas por simplicidade ou de fato está batendo no backend durante o teste? Talvez sso poderia fazer com que a chamada pra API sempre retorne um erro.

De toda forma, o intuito seria testar apenas a lógica da função Login? Penso que poderia ser mais simples, se for o caso, testar ela diretamente, sem usar esse TestComponent.

Collapse
 
fabimendes profile image
Fabi Mendes

Então, fiz um teste com mock pra testar se a função Login está sendo chamada ao clicar no botão, esta parte está ok.
Mas eu queria testar neste caso o estado do usuário, se após os dados serem validados o status dele passa para logged=true. Fiz a função enviado os dados para bater no backend(api) para testar essa validação... Tenho pouca experiência com testes, talvez eu esteja testando algo indevido também, rsrsrs
Este era um passo de um teste que me enviaram onde pediam testes de snapshot com jest...não consegui visualizar como o snapshot poderia se encaixar neste contexto, então tentei fazer assim...rs