Teste uma Integração antes que ela Ocorra — Parte 2: Consumidor

Priscila Campos
3 min readAug 2, 2022

--

"Faça sua parte que eu te ajudarei". Não está na Bíblia, mas está no Pact.

Para o fornecedor validar o contrato esperado pelo consumidor, o consumidor precisa redigi-lo.

Gif: Canva — design do artista canvaoriginalstickers

Visão Geral

Continuação do artigo "Teste uma Integração antes que ela Ocorra — Parte 1: Introdução".

Esse artigo tem o intuito de: exemplificar como o contrato é redigido pela aplicação consumidora nos testes de contrato com a ferramenta Pact.

Cenário

A aplicação consumidora dessa prova de conceito será um front-end que usa JavaScript em seus testes unitários para validar as chamadas de uma API fornecedora, mais o Pact CLI pode ser utilizado com diversas linguagens e não é necessário que a linguagem utilizada no teste unitário do consumidor seja igual a do teste unitário do fornecedor, o importante é ambos validarem o contrato entre eles.

Teste de Contrato do Consumidor

Como pré-requisitos para o desenvolvimento do nosso front-end fictício tenho instalado: Node, NPM e uma IDE (vou utilizar o VSCode).

E na configuração do ambiente tenho as dependências de:

  • Projeto: axios (cliente HTTP) e dotenv (módulo para carregar as variáveis de ambiente do arquivo .env).
npm i axios dotenv
  • Desenvolvimento: Pact mais os módulos utilizados para a construção dos testes unitários do front-end.
npm i --save-dev @sucrase/jest-plugin @pact-foundation/pact @pact-foundation/pact-node jest chai

Abaixo o arquivo de configuração com:

  • Configuração do Jest (linhas 9 a 14);
  • Script para executar o teste de contrato (linha 7).

O contrato que vamos redigir é referente uma solicitação que o front-end faz para uma API que retorna artigos com determinados campos que ele utiliza para compor a interface de usuário.

Exemplo de como o front-end faz a chamada para a API de "artigos":

A variável de ambiente:

Para construir os testes de contrato propriamente ditos, nos arquivos de teste de unidade vamos precisar:

  • Importar o módulo do pact (linha 2);
  • Criar o mock da API provedora que responderá às consultas por HTTP como se fosse a API de "artigos" real (linhas 9 a 16);
  • Iniciar o mock da API provedora e aguardar que ele esteja disponível (linha 32);
  • Registrar uma expectativa no mock da API provedora (linha 33);
  • Verificar as interações especificadas (linha 57);
  • Gravar as interações registradas no mock da API provedora (linha 59).

Para gerar o contrato do consumidor basta executar os testes unitários do nosso front-end:

npm run test:contract

Se nenhuma falha ocorrer na geração do contrato, o mesmo será salvo no repositório definido na linha 14 do arquivo de teste (pasta pacts), mas se houver falha, o Pact gera um log na pasta definida na linha 13 desse mesmo arquivo para facilitar a diagnosticar o problema (pasta logs).

Imagem do VSCode mostrando em que lugar do repositório o contrato é gerado.
Imagem do VSCode mostrando em que lugar o contrato é gerado no repositório do projeto.

😊 Código completo da PoC https://github.com/PriCampos/poc-contract-test-with-pact.

O próximo artigo será o fluxo de publicação desse contrato para que a API fornecedora possa consultá-lo na execução dos seus testes unitários.

Referência

  • COMUNIDADE PACT. Introdução. Documentação oficial. Disponível em: <https://docs.pact.io/>. Acesso em 01 de agosto de 2022.

--

--

Priscila Campos

Senior Quality Analyst at Thoughtworks | Ribeirão das Neves — MG