Teste uma Integração antes que ela Ocorra — Parte 2: Consumidor
"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.
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).
😊 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.