Back-End

6 abr, 2018

Desenvolvendo TDD em Node.js com Mocha & Chai

Publicidade

Fala, pessoal! Tudo certo?

Hoje falaremos de testes com Node.js. Sei que é um tema que interessa a muitos, uma vez que testes fazem parte da nossa vida enquanto desenvolvedores, e com Node.js não seria diferente.

Falaremos também, sobre os frameworks que nos auxiliam nos testes em Node.Js: Mocha.js & Chai.

Vamos nessa, pois temos muita coisa para falar e muito código para mostrar!

O que é TDD e qual é a sua importância?

Fazer uso do TDD em qualquer aplicação que esteja sendo desenvolvida é de suma importância, pois auxilia a desenvolver melhor uma determinada regra de negócio, e muito melhor que isso: deixará o seu código muito mais elegante e – principalmente – testável. O resultado disso é evitar que um determinado bug chegue até o usuário final: seu cliente!

TDD é o acrônimo para Test Driven Development, onde seu principal objetivo é: o desenvolvedor deverá escrever testes antes de começar a desenvolver um determinado código, visando justamente escrever o mínimo de código possível. O teste passando, se faz necessário refatorar até que possa satisfazer o objetivo final, que é escrever códigos elegantes, limpos e testáveis. Sem contar que o TDD ajudará a reduzir o máximo de probabilidade de erros no código.

Para que você desenvolvedor possa escrever um teste de sucesso, o importante é que você siga os passos abaixo:

  1. Crie um teste
  2. Execute o teste. Nesse momento, o teste deverá falhar. Caso não falhe, ou o teste que você criou não está operando corretamente, ou seu código tem algum bug
  3. Depois, desenvolva um bloco de código necessário para que faça passar o teste
  4. Execute novamente os testes e verifique se passará
  5. Refatore
  6. Se necessário, repita o processo desde o primeiro item

A imagem abaixo resume justamente o que eu quero explicar aqui:

Não vou me aprofundar muito sobre o TDD em si. Se quiserem, eu posso deixar no repositório dessa matéria (aqui), artigos que falam sobre a importância e como realizar testes de sucesso! Meu foco neste artigo é realizar TDD em Node.Js com Mocha e Chai! Vamos nessa!

O que seria Mocha?

Toda linguagem possui seus determinados frameworks para realizar testes em suas aplicações, e no Node.Js não seria diferente. Com isso, a maioria dos desenvolvedores Node.js usam o Mocha.js.

Como o próprio site do Mocha diz: “Mocha é um framework Javascript que roda em aplicações Node.js e no browser para realizar testes assíncronos de uma maneira simples e fácil”.

Outro ponto a mencionar sobre o Mocha é que o seu projeto é totalmente open-source. Caso algum de vocês queiram fazer alguma contribuição para esse maravilhoso framework de testes, basta acessar o repositório do Mocha no Github.

A sua documentação é rica e de fácil compreensão. Abusem da documentação para aprenderem a utilizar melhor esse maravilhoso framework.

Chai – Uma biblioteca de Assertion

Eu sempre digo nas minhas palestras de TDD com Mocha & Chai, que o Chai é o melhor amigo do Mocha. Pois o Chai.js é uma excelente biblioteca de asserção que auxilia os desenvolvedores Node.Js para realização – não somente de TDD – mas de BDD, também!

Assim como o Mocha, o Chai possui uma documentação muito intuitiva, rica e com várias demonstrações de como instalar e até mesmo usar. Peço também que deem uma olhada na documentação da biblioteca.

Nele, o desenvolvedor tem a opção de escolher a melhor interface que deseja para a realização de suas asserções nos seus testes: “should”, “expect” e “assert”. Sem contar que, caso você esteja realizando um determinado teste de requisições via HTTP, o Chai te auxilia de maneira magistral a realizar as asserções necessárias.

Três assertions opcionais da biblioteca do Chai

Bom, chega de falar, né? Vamos botar a mão no código e entender melhor como realizar testes em Node.js com Mocha & Chai!

Demos – Porque com código, tudo fica mais fácil!

Para as demos abaixo, estou usando os seguintes recursos:

  • Node.js
  • Sintaxe ES6
  • Npm
  • Visual Studio Code
  • Mocha
  • Chai

Estou disponibilizando os códigos das demos através do meu repositório do GitHub neste link. Caso tenham dúvidas do que foi desenvolvido aqui, peço que abram uma issue. Assim, estarei analisando a dúvida, e em seguida responderei a todos vocês!

Utilizarei nessa demo, a IDE: Visual Studio Code, que pode ser baixada aqui. Porém, sintam-se à vontade para usar a IDE que melhor se encaixe no seu perfil!

Na primeira demo, realizarei o teste clássico da calculadora. Por que um teste fácil? Para compreendermos melhor a segunda demo que será um pouco mais complexa.

Primeiramente, precisamos instalar o Node.Js, disponível neste link e assim que instalado, peço que digitem o seguinte comando abaixo:

npm init

O npm init permitirá a criação do arquivo package.json – arquivo necessário para instalar as dependências para as demos. Feito isso, o seu projeto terá o seguinte package.json criado:

{ "name": "tdd-node-mocha-chai-imasters", "version": "1.0.0", "description": "Repositório responsável pelos códigos de exemplo desenvolvidos no artigo do iMasters", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "git+https://github.com/glaucia86/tdd-node-mocha-chai-imasters.git" }, "keywords": [ "js", "node", "tdd", "mocha", "chai", "npm" ], "author": "Glaucia Lemos <glaucia_lemos86@hotmail.com> (http://www.code4coders.wordpress.com.br/)", "license": "MIT", "bugs": { "url": "https://github.com/glaucia86/tdd-node-mocha-chai-imasters/issues" }, "homepage": "https://github.com/glaucia86/tdd-node-mocha-chai-imasters#readme", "devDependencies": { "eslint": "^4.19.1", "eslint-config-airbnb-base": "^12.1.0", "eslint-plugin-import": "^2.10.0" }

Agora, com o package.json criado, vamos instalar o mocha de maneira global e depois de maneira local, conforme seguem os comandos abaixo:

npm install --global mocha

E instalando agora dentro do nosso projeto (dentro da pasta do seu projeto) o seguinte comando:

npm install --save-dev mocha

E vamos aproveitar também para instalar globalmente e localmente, o Chai:

npm install -g chai

npm install --save-dev chai

Agora o nosso arquivo package.json deverá estar da seguinte maneira:

{ "name": "tdd-node-mocha-chai-imasters", "version": "1.0.0", "description": "Repositório responsável pelos códigos de exemplo desenvolvidos no artigo do iMasters", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "git+https://github.com/glaucia86/tdd-node-mocha-chai-imasters.git" }, "keywords": [ "js", "node", "tdd", "mocha", "chai", "npm" ], "author": "Glaucia Lemos <glaucia_lemos86@hotmail.com> (http://www.code4coders.wordpress.com.br/)", "license": "MIT", "bugs": { "url": "https://github.com/glaucia86/tdd-node-mocha-chai-imasters/issues" }, "homepage": "https://github.com/glaucia86/tdd-node-mocha-chai-imasters#readme", "devDependencies": { "chai": "^4.1.2", "eslint": "^4.19.1", "eslint-config-airbnb-base": "^12.1.0", "eslint-plugin-import": "^2.10.0", "mocha": "^5.0.5" }

Dentro da pasta src, vou pedir para vocês criarem três pastas:

  • demo-1 (folder)
    • calculadora.js (file)
  • demo-2 (folder)
    • demo.js (file)
  • test (folder)
    • calculadora-test.js
    • demo-test.js

A estrutura do projeto deverá estar como na imagem abaixo:

Abram o arquivo package.json novamente e incluam o script: directories, conforme segue a imagem abaixo:

O script: “test”: “mocha”, nos ajudará a executar os testes das demos!

Agora, vamos começar primeiro pela demo-1 > calculadora.js. Escrevam o código abaixo:

Como podem notar, são as quatro operações comuns de uma calculadora: somar, subtrair, multiplicar e dividir.

Agora, vamos partir para os testes. Para isso, abram o arquivo: calculadora-test.js. Vamos fazer o seguinte: peço que escrevam o código abaixo, e logo após explicarei o que cada linha está fazendo!

Como podem ver, estou fazendo uso de assertions da biblioteca do “Chai”, e como consequência também o Mocha.js.

A palavra reservada “describe” significa que estamos descrevendo o que o nosso teste irá fazer. Nesse caso, testar as quatro operações da calculadora.

Já a palavra reservada “it” nos permite criar uma cadeia de testes e os casos de teste. Os asserts são justamente o que queremos testar. Nesse caso, observem, por exemplo, a linha 18. Ali estamos analisando se a soma de 5 + 5 será igual a 10. Nesse caso, esse teste irá passar, assim como os demais.

Em Chai, existem inúmeros outros assertions. Caso queiram ver e estudar um por um, basta clicar na documentação da biblioteca, neste link.

No link acima, vocês verão inúmeros outros exemplos que poderão testar e aprender cada vez mais sobre essa biblioteca.

Para testar essa aplicação, basta entrar na pasta src e digitar o comando: mocha ou test, e obter o resultado:

Simples, não é mesmo?

Só para fins de teste: inclua esse seguinte bloco de código e executem depois o teste:

Aproveitem e escrevem mais códigos de exemplos na documentação do Chai e testem. #ficaadica

Bom, agora que vocês entenderam como funciona, vamos partir para mais testes diferentes. Para isso, abram o arquivo demo.js e escrevam o seguinte bloco código:

Agora, no arquivo demo-test.js, escrevam o seguinte bloco de código:

Em seguida, executem e vejam o resultado:

Procurem desenvolver e executar outros testes usando outros assertions do Chai e o framework de teste Mocha! Isso ajudará quando forem, por exemplo, testar uma determinada rota em suas APIs.

Considerações finais

TDD é uma boa prática de programação e sempre que puderem, procurem desenvolver testes. Pois vocês poderão ter a mais plena certeza de que evitarão problemas de códigos mau escritos indo para a produção.

Lembrando que todo código desenvolvido encontra-se neste link:

Lembrando que há inúmeros tutoriais muito legais no meu canal do Youtube como, por exemplo:

  • Tutorial CRUD MVC 5 + EF + AngularJs
  • Tutorial CRUD API RestFul com Node.Js + Express + MongoDb
  • Curso de TypeScript para Desenvolvedores C#
  • Curso – Introduçaõ a TDD com C# .NET & nUnit
  • Hands On: Bots + Node.Js + Microsoft Bot Framework

Caso queiram saber mais, acessem o meu canal: Glaucia Lemos

No próximo artigo falarei sobre Bots com Node.js. Aguardem, pois virá muito conteúdo técnico e em português (algo que ainda não tem). Será uma série de artigos!

Até a próxima, pessoal!