it('Não pode ser cadastrado um usuário com e-mail duplicado', async () => {
const usuarioMock = {
nome: 'Raphael',
email: 'teste@gmail.com',
senha: '123456',
};
const usuarioSave = authService.cadastrarUsuario(usuarioMock);
await expect(usuarioSave).rejects.toThrowError('O email já esta cadastrado!');
});
No trecho de código acima é contemplado o cenário 2 que devemos fazer um teste em que se verifica que o e-mail já está cadastrado no DB (esse trecho foi dado como resolução pelo instrutor). Porém, notei que somente neste cenário o serviço é chamado sem o await, mas mesmo assim o teste passa.
async cadastrarUsuario(data) {
try {
if (!data.nome) {
throw new Error('O nome de usuário é obrigatório!');
}
if (!data.email) {
throw new Error('O email de usuário é obrigatório!');
}
if (!data.senha) {
throw new Error('A senha de usuário é obrigatório!');
}
const usuarioCadastrado = await Usuario.pegarPeloEmail(data.email);
if (usuarioCadastrado) {
throw new Error('O email já esta cadastrado!');
}
data.senha = await bcryptjs.hash(data.senha, 8);
const usuario = new Usuario(data);
const resposta = await usuario.salvar(usuario);
return { message: 'usuario criado', content: resposta };
} catch (err) {
throw new Error(err.message);
}
}
Este segundo trecho mostra que o teste deveria falhar na chamada de Usuario.pegarPeloEmail, que é assíncrona.
static async pegarPeloEmail(email) {
const resultado = await db.select('*').from('usuarios').where({ email });
return resultado[0];
}
Minha dúvida portanto é por que a chamada pelo teste não recebe await antes de chamar o serviço, visto que por ele chamamos uma função assíncrona e mesmo assim temos o resultado correto ? Todos os outros cenários levam await na chamada do serviço.