Junior
Como testar corretamente o campo de entrada de email?
sobes.tech IA
Resposta da IA
A validação do campo de entrada de email inclui a verificação de funcionalidade, validação, usabilidade e segurança.
Testes funcionais:
- Inserção de endereços válidos:
test@example.comfirstname.lastname@example.comemail@subdomain.example.comfirstname+lastname@example.comemail@example.co.ukemail@example.museumemail@example.nameemail@example.демо(para suporte de nomes de domínio internacionalizados - IDN)
- Inserção de endereços inválidos:
- Ausência de
@:testexample.com - Múltiplos
@:test@@example.com - Formato de domínio incorreto:
test@example - Ausência de nome de utilizador:
@example.com - Caracteres especiais no nome de utilizador:
te!st@example.com,te#st@example.com - Caracteres especiais no domínio:
test@exa!mple.com - Endereço longo (verificação de limites):
a_very_long_email_address_that_exceeds_typical_limits@example.com(verificar limites de acordo com a especificação ou bom senso) - Endereço com espaços:
test @example.com - Endereço com sintaxe incorreta:
test@.com,test.@example.com - Endereço com endereço IP em vez de domínio (se não suportado):
test@[192.168.1.1] - Endereço com cirílico (se não suportado IDN):
тест@пример.рф
- Ausência de
- Campo vazio: Envio do formulário com o campo vazio.
Validação:
- Verificação de conformidade dos dados inseridos com a sintaxe do email (expressões regulares).
- Exibição de mensagens de erro ao utilizador ao inserir dados inválidos.
- Verificação da precisão e clareza das mensagens de erro.
- Verificação de que o formulário não é enviado na presença de erros de validação.
Usabilidade & UI/UX:
- Foco no campo ao carregar a página (se relevante).
- Texto de placeholder com exemplo de formato (
por exemplo, user@example.com). - Suporte para preenchimento automático do navegador.
- Presença de uma etiqueta (
<label>) para o campo. - O utilizador não pode inserir caracteres inválidos (se houver tal lógica no front-end).
- Se houver uma máscara de entrada, verificar seu funcionamento.
Segurança:
- Verificação de vulnerabilidades XSS: inserção de scripts, tags HTML (
<script>alert('XSS')</script>) no campo. - Verificação de injeções (SQL/NoSQL): inserção de caracteres específicos que possam afetar as consultas ao banco de dados (
' OR '1'='1). - Limitação de taxa (se o formulário envia email ou realiza ações que consomem recursos): verificar a limitação do número de tentativas de envio de um mesmo IP ou utilizador.
Automatização:
- Escrita de testes unitários para funções de validação de email.
- Escrita de testes de integração para verificar o funcionamento do campo no contexto do formulário.
- Escrita de testes E2E para verificar o cenário completo de uso do formulário com o campo de email.
Exemplo de código para teste unitário de validação:
// Suponha que temos a função validateEmail
function validateEmail(email) {
const re = /\S+@\S+\.\S+/; // Exemplo simples de expressão regular
return re.test(email);
}
// Testes unitários usando Jest
describe('validateEmail', () => {
test('deve retornar true para um email válido', () => {
expect(validateEmail('test@example.com')).toBe(true);
expect(validateEmail('firstname.lastname@example.com')).toBe(true);
});
test('deve retornar false para um email inválido', () => {
expect(validateEmail('testexample.com')).toBe(false);
expect(validateEmail('test@example')).toBe(false);
expect(validateEmail('@example.com')).toBe(false);
});
test('deve retornar false para uma string vazia', () => {
expect(validateEmail('')).toBe(false);
});
});
Exemplo de teste E2E usando Cypress:
// cypress/integration/email_field.spec.js
describe('Campo de entrada de email', () => {
it('valida corretamente e exibe erro para entrada inválida', () => {
cy.visit('/sua-pagina-do-formulario'); // URL da página com o formulário
cy.get('#email-input').type('email-invalido'); // Inserção de email inválido
cy.get('button[type="submit"]').click(); // Clicar no botão de enviar
cy.get('.error-message').should('be.visible').and('contain', 'Formato de email incorreto'); // Verificação da mensagem de erro
});
it('permite enviar o formulário com um email válido', () => {
cy.visit('/sua-pagina-do-formulario');
cy.get('#email-input').type('valido@example.com');
cy.get('button[type="submit"]').click();
// Verificações adicionais: redirecionamento, mensagem de sucesso, etc.
cy.url().should('include', '/sucesso'); // Verificação da URL após envio bem-sucedido
});
});
Tabela com exemplos de casos de teste:
| ID | Ação do utilizador | Resultado esperado |
|---|---|---|
| TC_01 | Inserir test@example.com |
O campo é considerado válido. A forma é enviada (se todos os campos estiverem preenchidos). |
| TC_02 | Inserir email-invalido |
O campo é considerado inválido. Uma mensagem de erro é exibida. |
| TC_03 | Deixar o campo vazio e tentar enviar o formulário | O campo é considerado inválido (se obrigatório). Uma mensagem de erro é exibida. |
| TC_04 | Inserir test@example.co.uk |
O campo é considerado válido. |
| TC_05 | Inserir <script>alert('XSS')</script> |
O script não deve ser executado. O campo deve ser sanitizado ou validado. |
Também é necessário considerar os requisitos específicos do projeto (por exemplo, suporte para certos domínios, sensibilidade a maiúsculas/minúsculas), testes em diferentes dispositivos e navegadores.