“person holding white and silver-colored pocket watch” by Veri Ivanova on Unsplash

Fazendo uma aplicação em Vue.js com TDD — Um guia extensivo para quem quer aprender — parte 4

Testando o nosso serviço de requisições para a API

Daniel Kuroski
magnetis backstage
Published in
5 min readNov 6, 2018

--

Este é o quarto de uma série de artigos:

Primeiro, desculpem mesmo a demora para esta parte, acabei não conseguindo me organizar para lançar o artigo na semana passada 😅 mas vamos ao que interessa.

Semana passada finalizamos todos os testes dos nossos componentes, e fizemos isso tudo integrando com a store, o que provavelmente foi a parte mais extensa e importante.

Vamos agora para a última parte da aplicação que falta ser testada, o serviço responsável pelas requests a api do github.

Testando o nosso serviço de requisições para a API

tests/unit/api.spec.js

Aqui está o nosso último teste, a única diferença do que foi visto até agora, é que estamos fazendo o uso de uma nova dependência instalada no início do projeto, o nock.

Basicamente essa biblioteca permite que você teste requisições http de forma isolada. Podemos especificar urls e caso seja feita uma requisição para ela, o nock irá interceptar, e tratar internamente a request para fazer as operações da forma como você especificou.

Vamos alanizar a partir da linha 11, estamos fazendo o nock observar qualquer requisição GET para a url: https://api.github.com/users/:username e ele irá interceptar isso para nós, e retornar uma resposta de status 200 com o usuário esperado (a fixture).

Em seguida, chamamos o método do service passando o usuário, e fazemos um flushPromise para garantirmos que todas as promises estarão resolvidas a partir deste ponto.

Para a faze de asserts, queremos garantir que o resultado do serviço, seja o nosso userFixture garantindo assim, que ele fez a requisição para a URL esperada, no qual estamos mockando com o nock.

E por fim, queremos garantir que a URL mockada no nock tenha sido chamada.

RED

Nosso teste vai falhar, já que não temos nenhum tipo de implementação ainda, vamos começar.

src/api.js

Finalmente temos o serviço responsável pelas requisições.

Fazemos o uso do axios, uma biblioteca que nos ajuda a fazer requisições HTTP.

Na linha 4, criamos uma instância do axios para fazer requisições para a API do Github, o adapter que passamos como configuração é necessário, para conseguirmos utilizar o axios com o nock.

O adapter permite a gente customizar a forma que o axios lida com as requests, possibilitando que o nock consiga interceptar as requisições.

Na linha 10, temos o método que recebe o username, retornando uma requisição GET para a api de usuários do github.

Na linha 13, pegamos a resposta da requisição, e retornamos a propriedade data da request, estou fazendo isso aqui, pois o axios altera o valor de retorno e encapsula a resposta da api dentro desta propriedade.

E com isso, concluímos todos os nossos testes da nossa aplicação.

GREEN!!!

Vamos ver como ficou?

Agora podemos finalmente ver o resultado final do nosso trabalho, rode:

npm run serve
Abra em http://localhost:8080/

O que estamos vendo?

WHITE

Absolutamente nada, mas é claro… precisamos criar uma rota para o nosso componente 😆

src/router.js

Pronto, agora sim:

Nosso resultado

Lembrando que podemos também testar as rotas, podemos criar um teste para garantir que temos as rotas esperadas, junto com os guards caso necessário, mas não faremos isso neste momento.

Mas com isso, a gente conseguiu criar uma aplicação inteira, sem ver ela, e o melhor de tudo, temos as principais partes totalmente cobertas por testes 😍

Resumo da obra

Resumindo

Neste quarto artigo, fizemos:

  • Testamos o serviço responsável por fazer requisições para o Github
  • Finalizamos a nossa aplicação 😃

Recomendo caso tenham interesse para dar uma lida nos repositórios do:

Pois há uma gama de funcionalidades que podemos fazer com estas bibliotecas, e também não se limitem com elas, existem outras libs que fazem esse tipo de serviço com o jest-axios-mock.

Também como um aviso, esta forma de testar esse tipo de serviço não irá substituir testes de integração e e2e, estamos garantindo aqui que a aplicação funciona desde que a api esteja retornando o que a gente espera, se algum dia a API do github sair do ar, mudar o endereço ou alterar o formato de resposta (isso é extremamente errado), a aplicação irá quebrar, e aí que vai entrar estes outros testes para garantir o funcionamento total da aplicação.

Fiquem atentos que próxima semana estaremos inserindo uma biblioteca de componentes de terceiros e iremos atualizar os nossos testes para comportar ela.

Muito obrigado pela atenção e me desculpem novamente pela demora 😅

Se gostou, por favor, clique no 💚, e qualquer dúvida, sugestões ou correções sinta-se a vontade para me mandar uma mensagem, eu agradeço muuito 😄.

Meu Twitter: @DKuroski

Vejo você próxima semana 😄

--

--