Mocks, Stubs por um iniciante.
Como desenvolvedor no início de sua carreira é possível que você receba tarefas que parecem que você não tem como realizá-las, e sim é verdade, mas para te ajudar sempre tem um Tech-lead ou o Google caso prefira, e tá tudo bem.
Mas vá por mim, não se furte a perguntar ao seu Tech-lead, porém crie o hábito de pesquisa por um tempo sobre o assunto, no início pode parecer difícil saber o que procurar, mas essa procura o ajudará inclusive na habilidade de descobrir o que realmente precisa.
Dito isso, quero compartilhar um aprendizado que eu acho que é bastante importante para qualquer desenvolvedor web, a construção de testes, vamos ver como fazer um request em uma API Web.
Alguns links estão em inglês, utilize um tradutor online, leia e releia quantas vezes for preciso, afinal é para o seu aprendizado.
Eu uso linguagem Ruby com Rspec pois é minha ferramenta de trabalho no momento, em Ruby utilizo o Framework Rails que tem me ajudado na compreensão da programação orientada a objetos. São excelentes ferramentas para um iniciante, assim como gosto do Python e Go(golang).
Não sou um especialista, apenas quero compartilhar conhecimento, até para fim de fixação do meu aprendizado, sinto que preciso disso, me descobri assim, você precisa descobrir qual a melhor forma para você aprender novas habilidades, se quiser saber sobre quem sou. (Leia aqui)
Uma tarefa que certamente será comum é solicitação de requisição(request) e resposta(response) HTTP, ou seja, fazer uma chamada em uma API, que nada mais é do que um endereço de internet que fornece alguns dados, geralmente escritos nos formatos XML ou JSON.
Uma requisição nada mais é do que as mensagens enviadas, por exemplo, por um navegador da Web, são chamadas de solicitações (requests), ou também requisições, e as mensagens enviadas pelo site ou servidor como resposta são chamadas de respostas (responses).
Imagine que você quer comprar um ingresso, voce acessa o site do show, preenche um formulário com seus dados e clica em enviar. Você fez uma requisição(request), assim que o site processar seus dados, você receberá uma resposta(response) de confirmação,.
Para iniciar os testes em Ruby você precisa de um cabeçalho com Require, Describe, Context, e Its, que você pode ler de forma bem didática nesse link. Aqui vou deixar esses detalhes de lado, quero mesmo é focar no conteúdo que foi importante para eu começar a ter contexto do que é, como vai funcionar o seu teste e seus webmocks.
Webmocks ou apenas mocks são doubles(cópias, dados fictícios) pré-programados que irão criar expectativas que deverão ser satisfeitas pelos testes. Podemos usá-los quando queremos testar a chamada de uma API.
Antes..mais um aviso.. Leia os links!!!
Primeira coisa a fazer é organizar seu pensamento para o que estamos fazendo. Nossa tarefa consiste em solicitar uma informação, porém, como estamos fazendo um teste, por muitos motivos, não vamos solicitar para a API usando dados reais e nem “bater” na API, isso é como abrir seu navegador e digitar a URL do seu banco, e ficar digitando senhas aleatórias, isso não é legal e pouco produtivo, então é ai que entram os mocks.
O mock pode vir de um arquivo no formato json, por exemplo; Vamos pensar que para acessar uma API é ter um Payload, que nada mais é que a parte principal dos dados enviado, da qual se excluem as informações utilizadas para facilitar a entrega, como cabeçalhos e metadados que podem conter. Esse payload terá dados como nome, números de documentos, etc.. (Leia os links).
Podemos chamar esse arquivo de maneira simples e direta, atribuindo a uma variável.
Note que antes do caminho do arquivo, tem um método “file_fixture” (leia o link por favor…)
Agora já temos um payload pronto para ser chamado em nossa requisição. Além do payload, dados para enviar na requisição, vamos precisar de Stubs, que nada mais é do que um pedaço de código usado para substituir algumas outras funcionalidades de programação. Um stub pode simular o comportamento de um código existente ou ser um substituto temporário para o código ainda a ser desenvolvido.
Após fazer nossa requisição(stub_request), usando(with) o payload(arquivo com dados), nós esperamos o retorno(to_return), que nada mais é do que a resposta da sua solicitação(request), para isso o protocolo HTTP usa um código de status (status: 200), e logo depois a gente faz outro mock de arquivo com o modelo de resposta que esperamos de retorno da nossa requisição.
Com isso nós conseguimos começar um setup inicial de como realizar uma requisição web em uma api, utilizando um payload, um request e um response “mockado”.
Por fim temos uma chamada para nossa classe, onde esperamos como expectativa, que dê match, isso quer dizer, que seja igual ao conteúdo de nosso arquivo json mock de resposta.
Foi apenas uma breve explicação.
Logo trago mais conteúdo sobre o assunto e outros mais!
Abraços e fiquem bem!