Teste uma Integração antes que ela Ocorra — Parte 4: Fornecedor

Priscila Campos
4 min readAug 8, 2022

--

Foto: Canva — design dos artistas Clker-Free-Vector-Images, @pixabay e @icon0com

Visão Geral

Continuação do artigo “Teste uma Integração antes que ela Ocorra — Parte 3: Publicação de Contrato”.

Esse artigo tem o intuito de: exemplificar como ocorre a verificação de contratos antes que a integração em si ocorra, ou seja, como que ainda na fase de execução dos testes de unidade da aplicação fornecedora ocorre o match entre a resposta atual da API versus a resposta esperada pela aplicação consumidora.

Cenário

É necessário realizar uma refatoração em nossa API fictícia de artigos e essa mudança não pode impactar no funcionamento do front-end consumidor. Se em último caso existir uma mudança necessária também no front-end, a mesma precisa ser comunicada previamente para compor a estratégia de publicação dessa demanda.

Teste de Contrato do Fornecedor

Mantive os mesmos pré-requisitos utilizados para a aplicação consumidora para o "desenvolvimento" da aplicação fornecedora.

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

  • Projeto:
npm i dotenv json-server
  • Desenvolvimento:
npm i --save-dev @sucrase/jest-plugin @pact-foundation/pact @pact-foundation/pact-node jest json-server

Para simular o funcionamento real da API de artigos, vou pular etapas de desenvolvimento usando o módulo json-server, o json a seguir contém a resposta que a API fake vai retornar.

Modifiquei o arquivo de configuração para conter o script que vai iniciar nossa API fake:

Agora só iniciar a API fake:

npm run up:apifake
Imagem da resposta da API fake

Para construção dos testes de contrato é preciso informar no arquivo de teste:

  • Importar o módulo do Pact (linha 1);
  • Definir as opções de verificação de contrato (linhas 8 a 17);
  • Informar endereço da API de artigos (linha 10);
  • Informar a URL obtida via interface do Pact Broker com o endereço do contrato mais recente do consumidor (linha 11);
  • Informe se o resultado do teste deve ser publicado no Pact Broker (linha 12);
  • Definir o ambiente que os contratos serão comparados (linha 14);
  • A verificação do contrato (linha 19).

No arquivo de configuração indique o script para executar os testes de contrato:

Execute os testes de contrato:

npm run test:contract
Imagem do terminal com o resultado dos testes de contratando passando.

Observe que na resposta da API fake de artigos tem o campo "tag" que não consta no contrato redigido pelo consumidor e mesmo assim os testes de contrato do fornecedor passaram, isso ocorre porque os testes do fornecedor só vão quebrar se este deixar de retornar a resposta mínima esperada pelo consumidor com seus respectivos valores e tipos de dados.

Em um contexto real sugiro que previamente à execução dos testes de contrato da perspectiva fornecedora seja disparado um script com o setup de ambiente, o script deve garantir um estado inicial na base de dados conhecido pelos testes para evitar falsos negativos.

Como os testes executados estavam configurados para serem publicados, então tanto o provedor quanto o consumidor podem consultar se a resposta atual da API está mantendo a resposta mínima esperada pelo consumidor via interface do Pact Broker.

Imagem da interface do Pact Broker mostrando que o contrato atual da API condiz com o contrato esperado pelo consumidor.

Vão haver situações em que a API fornecedora faz modificações que acarretam mudanças não planejadas no consumidor, para esses casos o Pact permite a ambos os times insumos para detectar essas mudanças ainda na fase dos testes de unidade da API, reduzindo o custo de identificar essa mudança tardiamente somente no teste disparado sobre a interface do usuário.

Imagem da interface do Pact Broker mostrando que o contrato atual da API não condiz com o contrato esperado pelo consumidor.

Se de fato o consumidor precisar adequar a uma nova versão de contrato da API, a aplicação fornecedora avisa o time da aplicação consumidora, esse realiza adequações quanto à resposta da nova versão da API e publica novamente o contrato, se ambos derem match, então esse passa a ser o contrato vigente para uma dada branch.

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

No próximo artigo vou fazer um compilado do build do consumidor e provedor.

Referência

--

--

Priscila Campos
Priscila Campos

Written by Priscila Campos

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