segunda-feira, 13 de fevereiro de 2017

Jasmine: Testes Automatizados em JavaScript - Por onde começar?


  • Porque Testar?

Testar software é fundamental nos dias de hoje. O teste garante a qualidade do sistema e previne os bugs, evitando muita dor de cabeça. Lembra daquele ditado "É melhor previnir do que remediar"? É isso aí. 

Se você entregar um produto para o cliente final sem testar, e ele mesmo encontrar os bugs, pode ter certeza que você terá um cliente insatisfeito. E talvez até um ex-cliente.

  • Porque Testes Automatizados?

Porque testar manualmente quando se pode escrever testes em um código que rodará em segundos? Testes automatizados vieram para facilitar a vida de nós desenvolvedores, e não o contrário. E, em um cenário onde precisa-se fazer centenas de testes em diversos dispositivos, o teste automatizado é sempre a melhor opção.

  • Porque Jasmine?

JavaScript é uma linguagem que tem crescido muito no mercado, afinal, ela roda em qualquer browser e possui tipagem dinâmica. E o framework Jasmine nos permite criar testes automatizados de forma simples e rápida com Ruby, Phyton ou JavaScript.

  • Por onde começar?

Configuração da maquina

Antes de começar você precisa ter o NodeJS instalado na sua maquina. Instale a versão recomendada clicando aqui. Faça o download e execute.


Instalando Jasmine

Há duas formas de instalar o Jasmine: [1] via linha de comando / prompt ou [2] via download .zip pelo site.

[1] Para instalar o Jasmine via linha de comando / prompt (utilizando npm) use o seguinte comando:

$ npm install jasmine

Para inicializar Jasmine no projeto:

$ jasmine init

E para rodar os testes utilize somente:

$ jasmine

[2] Para efetuar o download do .zip da ultima release clique aqui. Depois é só extrair tudo e terá o mesmo resultado.


Entendendo a estrutura das pastas

Para os exemplos abaixo, instalei o Jasmine via download do .zip pelo site.


Lib: é onde fica a biblioteca do Jasmine.
Spec: é onde ficará os arquivos .js com o código de testes automatizados.
Src: é onde ficará todo o código-fonte da aplicação.
SpecRunner.html: Caso você tenha feito o download do Jasmine via .zip pelo site, ele já virá com esta estrutura de pastas com arquivos de exemplo. O SpecRunner.html serve para rodar e visualizar o resultado dos testes no navegador.


Escrevendo os testes

Para escrever os testes seguimos um padrão bem simples e fácil de memorizar, mesmo não tendo muito conhecimento em inglês.

Em meu exemplo, temos diversos testes para um sistema de consultas médicas.

Na pasta src, tenho uma função para criar uma nova "Pessoa" que recebe como parâmetros nome, idade, peso, altura.



Ainda na pasta src, também há uma função para criar uma nova "Consulta" que recebe como parâmetros o paciente, procedimentos, particular, retorno, data. É aí que entra as regras de negócio:

  • o raio-x custa R$ 55,00
  • o gesso custa R$ 32,00
  • a consulta padrão custa R$ 25,00
  • a consulta particular custa R$ 50,00


Como saber se o sistema está funcionando corretamente? Testando? Então vamos lá...

Recapitulando: os testes devem ficar na pasta spec.
  • Testando o Paciente


Describe: É a descrição e pode ser usada mais de uma vez, como titulo e sub-titulo
It: Informa o que será testado
Criamos um novo Paciente para o teste
Expect: Esperamos que o calculo do imc do Paciente tatiane recém criado (...)
toEqual: (...) seja igual ao valor "20.202020202020204"

Voltando lá na pasta src onde temos a função Paciente, sabemos que o calculo do imc é "peso / (altura * altura)". Então basta fazer o calculo com o peso e altura do paciente, e, após, adicionar o resultado entre as () após o .toEqual.


Se você estiver utilizando o SpecRunner.html para rodar e visualizar os testes, o resultado será este acima.

Obs: Não esqueça de referenciar os arquivos .js se for utilizar o SpecRunner.html! 


  • Testando a Consulta


Describe: "Consulta" como titulo geral dos testes.
Criamos a variável tatiane.
beforeEach: como um paciente será necessário em todos os testes, utilizamos o beforeEach para criar este paciente e, assim, podemos utilizar o mesmo paciente em todos os testes, sem a necessidade de ficar criando um para cada teste.
Describe: Descrição do teste.
It: Informa o que será testado, neste caso o sistema não deve cobrar nada, pois se trata de um retorno.
Criamos uma nova Consulta, recebendo como parâmetros (paciente, procedimentos, particular, retorno) o paciente recém criado tatiane, tipo de procedimento em branco, particular como verdadeiro e retorno como verdadeiro.
Expect: Esperamos que o preço da consulta (...)
toEqual: (...) sejá igual à R$ 0,00, já que se trata de um retorno.


Para rodar os testes via prompt de comando, basta utilizar o comando $ jasmine

Obs: Quando for rodar os testes via linha de comando, deve-se utilizar "require" para referenciar os arquivos .js necessários para o teste. Veja exemplo no meu GitHub clicando aqui.


Código de exemplo no GitHub

Os códigos utilizados como exemplo neste post estão todos no meu GitHub. Acesse clicando na imagem abaixo:

 Código de exemplo no GitHub


Duvidas? Criticas? Sugestões? Mande uma mensagem! Abraços.
Anterior
Proxima

0 comentários: