Frederico Moreira




Bem vindo 2015! Já estamos em fevereiro e vamos lá para o primeiro post do ano e concluir esta série sobre "Como você anda testando sua Api Rest?"

Justificando o porque que escolhi os módulos Chai, SuperTest e Mocha para esta série de posts é porque atualmente trabalho num time que desenvolve Api Rest usando NodeJs como backend e estamos utilizando estes módulos para criar nossa suite de testes e até o momento tem nos atendido bem.

Eu adicionei na Api PhoneBook alguns arquivos e diretório que irei explicar de forma detalhada em seguida. Para auxiliar na preparação dos nossos cenários de teste eu criei um diretório denominado "db" com uma arquivo db.js como conteúdo, mas de forma específica o que faz este arquivo?


Utilizei o Mongoose que é um biblioteca do Nodejs que proporciona uma solução baseada em esquemas para modelar os dados da sua aplicação.
"Mongoose fornece um mapeamento de objetos do MongoDB similar ao ORM (Object Relational Mapping), ou ODM (Object Data Mapping) no caso do Mongoose. Isso significa que o Mongoose traduz os dados do banco de dados para objetos JavaScript para que possam ser utilizados por sua aplicação. 

Utilizando o mongoose eu criei três métodos públicos: drop, init e disconnect. Os nomes já são sugestivos para a responsabilidade de cada um dos métodos, o "drop" é justamente responsável por dropar(deletar) a collection, o init tem a responsabilidade de iniciar a conexão com o banco e o disconnect  para desconectar.

Estes métodos compõem a preparação de cada cenário de teste da nossa Api, criei também um diretório denominado test contendo dois arquivos: get-contacts.js post-contacts.js, que respectivamente agrupam alguns cenários de testes dos verbos HTTP GET e POST.

Veja abaixo um exemplo da utilização dos métodos que criei do mongoose:



 Assim como no Junit geralmente usado no Selenium + Java o Mocha nos permite preparar nossos testes com os verbos before, beforeEach, after e afterEach. No exemplo acima antes de cada teste nos iremos deletar a collection "contacts" e ainda antes de executar todos os testes iremos conectar no banco e após a execução de todos os testes desconectaremos do banco. O que ganhamos com isso?
Garantimos que um a execução de um teste não influencia na execução do próximo.

Achei um figura legal que trás um comparativo interessante entre a terminologia entre Sql e Mongo para que posam entender melhor os termos do mongo como collection e document.



Bom o que eu tinha para trazer de informação neste ultimo post da série era isto, mostrar um exemplo de como estruturar seus testes junto ao código da sua Api, deixarei para vocês clonar a a nova versão da Api PhoneBook e executar na sua máquina os testes. Os testes ainda não contemplam todos os verbos HTTP que a Api oferece, fiquem a vontade para aumentar a cobertura e fazer um Pull Request no github me ajudando a aumentar a cobertura dos testes e ao mesmo tempo exercitando um pouco dos conceitos aqui apresentados.

Espero ter ajudado a esclarecer algumas possíveis dúvidas sobre automação de testes de Api, assim como utilização de NodeJs em conjunto com MondoDB e ainda a utilização do git. O que ando aplicando nos projetos que valem a pena dar uma olhada é:


Estou disponível sempre para conversamos sobre quaisquer dúvidas que se fizerem necessárias e no mais obrigado pela visita.