Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Classificação de testes

describe('Testando a rota login (POST)', () => {
  it('O login deve possuir um email e senha para se autenticar', async () => {
    const loginMock = {
      email: 'raphael@teste.com.br',
    };

    await request(servidor)
      .post('/login')
      .send(loginMock)
      .expect(500)
      .expect('"A senha de usuario é obrigatório."');
  });
describe('Testando configDB', () => {
  it('Teste de conexão com o banco de dados', async () => {
    const autorMock = {
      nome: 'Luana',
      nacionalidade: 'Brasileira',
      created_at: new Date().toISOString(),
      updated_at: new Date().toISOString(),
    };

    const autorSalvo = await db('autores').insert(autorMock)
      .then((retorno) => db('autores')
        .where('id', retorno[0]))
      .then((autorSelecionado) => autorSelecionado[0]);

      expect(autorSalvo.nome).toBe(autorMock.nome);

      await db('autores').where({ id: autorSalvo.id }).del();
  });
});

O teste 1 é de integração ou E2E e o teste 2. E pq?
O E2E não precisa de uma aplicação para usar o nosso Backend? Essa aplicação que iria usar o nosso backend seria um frontend?

1 resposta
solução!

Oii, Luidi.

Vamos analisar cada ponto da sua dúvida para que a diferença entre as camadas fique nítida.

Teste 1: Rota de Login

Este teste é classificado como um Teste de Integração.

Ele utiliza o request(servidor) pra disparar uma requisição HTTP real contra a sua API. Note que o teste verifica a comunicação entre a interface de entrada (a rota) e a lógica de validação interna. Embora o vídeo mencione que, no cenário de APIs, alguns chamam o fluxo completo de E2E, tecnicamente ele ainda é de integração porque estamos isolados no ecossistema do back-end.

Teste 2: ConfigDB

Este é um Teste de Integração focado em persistência (muitas vezes chamado apenas de teste de banco de dados).

Ele interage diretamente com o banco de dados (db('autores').insert). Ele não testa a API como um todo, mas sim se a comunicação e a escrita/leitura no banco de dados estão funcionando conforme o esperado. O fato de haver a limpeza da base ao final (.del()) reforça que o objetivo é validar a integridade da integração com o banco.

O que define o Teste End-to-End (E2E)?
Em uma definição rigorosa da engenharia de software:

  • No contexto de uma aplicação completa: O E2E simula a jornada do usuário final. Isso geralmente exige que o Front-end esteja ativo, enviando dados para o Back-end, que por sua vez acessa o Banco de Dados.
  • No contexto de uma API isolada: Quando dizemos que um teste de API é "ponta a ponta", queremos dizer que estamos testando desde a entrada da requisição (Route/Controller) até a persistência final no banco, sem "mockar" (simular) as camadas internas.
  1. O E2E precisa de uma aplicação pra usar o nosso Backend?
    Se o objetivo for validar o sistema inteiro, sim. Ferramentas como Cypress ou Playwright automatizam o navegador para clicar em botões e preencher formulários que chamam sua API.
  2. Essa aplicação seria um Frontend?
    Sim, geralmente um site, um aplicativo mobile ou até outro microsserviço que dependa totalmente da sua API para completar uma tarefa de negócio.

A confusão ocorre porque, quando trabalhamos apenas no back-end, chamamos o teste que percorre todas as nossas camadas internas de "E2E da API", mas para o usuário final, o E2E de verdade só acontece quando ele consegue realizar a ação na tela.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!