Testes de schema de API com Joi

Maximiliano Alves
5 min readMar 9, 2018

--

Quem nunca se deparou com alguns problemas utilizando schemas em API? Seja você desenvolvedor, testador ou analista. Em algum determinado tempo, alguma aplicação em que você trabalha já quebrou, por não receber o que era esperado. Com isso surgiram os testes de contratos de API. Hoje, os testes de contratos de API são muito utilizados quando consumimos APIs de terceiros ou até de times distantes, para ter essa garantia contínua do contrato.

O que são schemas de API?

Na fase inicial da concepção de um endpoint ou de um micro serviço, ocorre a modelagem e a documentação da API, lá está definido quais serão os tipos de respostas, como deverá ser o seu retorno e qual a tipagem dos campos de um contrato.

Exemplo de um schema:

E o que são os Testes de schema de API?

Com o entendimento do que são schemas de API, podemos dizer que a função das validações de schemas de API é garantir que tudo que foi definido em um contrato acordado, não tenha sido modificado ao ser implementado. Para garantir, podemos validar o schema que é retornado, a tipagem do campo retornada, valores limites, campos opcionais e obrigatórios, valores pré-definidos, entre outros tipos de validações.

Como podemos fazer isso?

Para fazer essas validações rápidas e assertivas, podemos utilizar o Joi em javascript. Essa ferramenta é um Object schema validation, será o nosso responsável por fazer as validações nos objetos retornados da API.

LET’S CODE!!!!

Configurações e instalações iniciais:

  • Node e NPM instalados
  • Acessar a pasta do seu projeto e executar npm init (Configurações default)
  • Configurar o babel npm install --save babel-core babel-preset-env
  • Criar um arquivo com nome .babelrc e adicionar {"presets": ["env"]}
  • Executar o seguinte comando para adicionar as dependências de desenvolvimento npm install --save-dev joi joi-assert mocha supertest
  • Instalar o reporter mochawesome npm install --save-dev mochawesome

Configuração do helper para uso de variáveis globais:

Criar uma pasta chamada test na raiz do projeto e dentro dela adicionar um arquivo chamado helpers.js. Esse arquivo serve para armazenar variáveis ou métodos globais para sua suíte. Adicionar as seguintes linhas ao arquivo:

Obs.: Na variável definida como global.request chamamos o método supertest passando a url do serviço utilizado para os testes.

Configuração do arquivo mocha.opts

O arquivo mocha.opts é um arquivo de configurações do mocha, que serve para passar alguns parâmetros, tais como: timeout de request, compiler e o nosso helper. Para configurar, basta criar um arquivo chamado mocha.opts dentro da nossa pasta test com as seguintes linhas:

Criando um teste de schema de API

Agora, vamos à criação do teste em específico. Vamos começar testando o seguinte endpoint https://jsonplaceholder.typicode.com/posts. Este endpoint retorna uma lista com objetos que representam uma publicação. Observando a API, podemos validar que todos os campos são obrigatórios, os dois primeiros são do tipo number e os dois últimos são string. Com essa definição podemos iniciar os testes criando uma pasta dentro da pasta test chamada schemas e dentro da pasta criamos um arquivo chamado posts.js .

Para escrever a suíte os casos de testes vamos utilizar o describe e o it do mocha. Segue abaixo a suíte e o teste, sem nenhuma implementação.

Como o retorno da nossa API é um array em que os itens são objetos, vamos iniciar criando uma variável e utilizando a função array do Joi e, a seguir, passar o objeto e seus itens. Segue abaixo:

Após este passo, basta criar o request passando o endpoint e fazendo o assert com o joiAssert, passando o response e o esperado (joiAssert(res.body, postsList)).

Para algumas garantias a mais no response eu adiciono duas linhas abaixo do .get para validar o Content-Type e o Status Code

Para finalizar, seu teste vai ficar assim:

E, para rodar o seu teste, basta executar o seguinte comando mocha --opts test/mocha.opts test/schemas/**/*.js ou adicionar um script ao seu package.json :

Para finalizar

Dentro da pasta mochawesome-report será gerado um HTML com um relatório de seus testes.

Então, de um jeito fácil e rápido você poderá implementar testes de schemas de API para rodar junto de seus testes unitários, assim garantindo maior qualidade as suas entregas.

Para conferir a solução aplicada nesta publicação, com mais alguns testes, é só acessar meu Github: https://github.com/maximilianoalves/joi-schema-test

--

--

Maximiliano Alves

QA Lead, Software automation lover, musician and in love with automation for mobile projects.