Testando Serviços (Obsoleto)

circle-exclamation

Serviços DEVERIAM ser principalmente testados usando testes de API, ou seja, um conjunto de testes que exercitam o código do serviço através da sua API iniciando o serviço, com suas dependências externas sendo mockadas (DBs e APIs). Teste unitário DEVE ser incluído nos casos em que se encontra trechos utilitários de código com um grande número de casos a serem exercitados ou código não performático, tornando impossível ou difícil testar com testes de API. A justificativa por trás disso é que, devido à nossa arquitetura de micro-serviços, que reduz as responsabilidades e, portanto, a quantidade de código a ser testada, a lógica dos serviços é simples, fazendo dos testes de API a opção com mais valor por tempo ao garantir que os serviços funcionem corretamente.

Stack de testes

Serviços DEVEM ser testados usando Jestarrow-up-right como o framework principal de testes com supertestarrow-up-right como o framework para configurar o servidor e testá-lo.

Estrutura de diretórios

Como os serviços PODEM ter tanto testes de API quanto testes unitários, haverá mais de um lugar onde os testes irão:

  • Testes unitários DEVEM ficar ao lado do arquivo ou módulo que estão testando, com o mesmo nome, mas com a extensão spec.ts em vez de ts.

  • Testes de API irão exercitar o código ao longo do serviço, então ELES DEVEM ser colocados em um diretório de teste , no caminho raiz. Os arquivos serão nomeados como o recurso do serviço que eles irão testar, ou seja, se os testes de API irão testar o recurso books, normalmente sob /books, o nome do arquivo DEVE ser books.spec.ts e DEVE ser colocado no diretório de teste diretório.

O que testar

  • Middlewares aplicados à rota (auth, etc), para garantir que a rota funcione como esperado.

  • A lógica dos controllers, para garantir que a rota faça o que esperamos que ela faça.

Testando serviços via API

Como mencionado antes, testes de API serão feitos usando Jest e supertest.

Para ilustrar como um desenvolvedor fará testes de API, temos o seguinte exemplo:

Encontramos no exemplo uma rota com diferentes métodos HTTP, GET e POST. Ambos os endpoints referem-se ao mesmo recurso, books, então um arquivo, chamado books.spec.ts DEVE ser criado sob o diretório de teste diretório para abrigar os testes para eles.

Todas as rotas e os diferentes fluxos de execução DEVEM ser testados minuciosamente. Estes são os casos que o desenvolvedor DEVE testar para esses endpoints:

  • Solicitar todos os livros funciona, respondendo com um 200 e a lista de todos os livros.

  • Solicitar todos os livros de um determinado autor funciona, respondendo com um 200 e a lista de todos os livros desse autor.

  • Publicar um livro sem autenticação falha, respondendo com um 401 e uma mensagem de erro.

  • Publicar um livro autenticado funciona, respondendo com um 200 e inserindo o livro.

Esses casos definitivamente terão seus its e a expectativa desses its DEVE conter pelo menos o status de resposta esperado e o que é esperado no corpo da resposta (se houver).

É assim que esses testes de endpoint devem ser escritos:

Atualizado