Para os programadores ou pesquisadores que sempre estão buscando algo diferente do que conhecem ou viver novas experiências no tema de testes unitários, já que fazem parte do dia a dia de muitos profissionais na área de engenharia de software, este artigo se dedicará a “QUnit” um framework de testes unitários de Javascript.
O que é QUnit. A forma mais simples de explicá-lo seria a seguinte: é um conjunto de testes unitários fácil de usar para Javascript que na atualidade é usado pelos projetos JQuery, JQuery UI, JQuery Mobile e, além do mais, é capaz de fazer testes de qualquer código Javascript, incluindo-se ele mesmo. Por esta breve definição o que se indica é que QUnit é robusto e tem um grande alcance.
A historia desta fabulosa ferramenta foi desenvolvida por John Resig como parte do projeto chamado JQuery e agora muitos a usam em seus desenvolvimentos. No ano de 2008 QUnit tem sua própria casa, nome e documentação do API, permitindo ademais que outras pessoas usem suas próprias ferramentas de testes unitários também. Nesse tempo, este framework tinha uma grande dependência de JQuery, mas depois, no ano de 2009, foram feitas mudanças substanciais e QUnit já podia ser executado sozinho.
Características ou Atributos
Todo bom framework de testes unitários tem características comuns e próprias que o diferencia dos demais ou que o tornem melhor do ponto de vista de cada programador. Neste artigo se explicarão dois dos muitos atributos que este framework contém, e que ademais são simples para programadores pouco experimentados.
- ‘Assertions’ ou Afirmações.
- ‘Grouping Test’ ou Agrupação de Testes.
Com a lista se passa a explicar a definição de cada uma com seu respectivo exemplo simples.
Instalação
No assunto de instalação desta ferramenta há uma serie de tópicos que devem ser levadas em conta, como por exemplo que existem duas maneiras de instalar QUnit nos nossos projetos:
- Baixando o arquivo Javascript.
- Instalado o pacote vía npm.
A questão de como instalá-lo dependerá do ponto de vista do desenvolvedor. Depois disso se deve criar um arquivo de extensão .html no qual se deve colocar o código seguinte:
<!DOCTYPE html>
<html>
<head>
<title>QUnit Testing</title>
<link rel=”stylesheet” type=”text/css” href=”qunit.css”>
</head>
<body>
<div id=”qunit”></div>
<script type=”text/javascript” src=”qunit.js”></script>
<script type=”text/javascript” src=”test.js”></script>
</body>
</html>
Se observa os arquivos “qunit.css” para os estilos, “qunit.js” que contém o framework para os testes unitarios, o particular é o arquivo chamado “test.js” é onde eu no pessoal faço o código dos testes. Se procede a correr o arquivo .html no navegador de preferencia e pronto.
Assertions ou Afirmações
As afirmações são necessárias para qualquer framework ou biblioteca de testes unitarios, qualquer programador necessita saber a veracidade dos resultados esperados de seu código, e QUnit na fica atrás neste tema. Ademais proporciona três tipos de afirmações ou assertions, as quais são:
- OK (verdadeiro,mensagem);
- equal (valor atual, valor esperado,mensagem);
- deepEqual (valor atual, valor esperado, mensagem);
O listado é pequeno e as definições de cada um têm seu próprio exemplo.
ok():
O mais simples só tem um resultado seja verdadeiro ou falso e tem a capacidade de abrir uma mensagem.
Exemplo:
test(“funcoes basicas”,function(){
var one = 2;
var two = 2;
ok( one == two, “Excelente”);
});
Explicação:
Se verifica se ambas variáveis têm o mesmo valor.
equal():
Esta função permite a comparação dos valores. Quando ambos valores estão de acordo o teste unitario é completado satisfatoriamente, do contrario falha e se apresentam os dois valores. Ademais permite apresentar uma mensagem.
Exemplo:
test(“testes de afirmacoes”,function(){
var password = “Ola Mundo”;
var password2 = “Ola Mundo”;
equal(password,password2,”Os password não são iguais”);
});
Explicação:
Verifica se ambos passwords são iguais; se não for assim aparece a mensagem:
deepEqual():
É uma afirmação mais estrita no momento de fazer comparações de dados primitivos ou objetos, possui três argumentos que são valor atual, valor esperado e mensagem.
Exemplo:
test(“Comparar dados”,function(){
var valor1 = 1;
var valor2 = 1;
deepEqual(valor1,valor2,”Valores distintos”);
});
Explicação:
É um teste unitário onde se verifica se os valores são do mesmo tipo de dado, no caso de que um de eles seja uma una cadeia de caracteres o teste não passa.
strictEqual():
É outro tipo de afirmação se desejamos ser mais extremistas na veracidade dos dados que estamos manipulando no nosso projeto, esta função verifica os dados ao estilo “===” onde os tipos de dados devem ser do mesmo gênero.
Exemplo:
test(“Cadeias e Numeros”, function(){
var valor = 1
var valor2 = 1
strictEqual(valor,valor2,”Não se podem compa números com cadeias”);
});
Explicação:
Ao ver o exemplo se pode observar que as variáveis são de tipo inteiro e consequentemente o teste unitário é aplicado satisfatoriamente, mas no caso de que uma das variáveis tenha o valor entre aspas, se apresenta um erro porque os dados não são do mesmo gênero.
Existem mais funções que nos ajudam a poder passar nosso código por testes unitários mas com as mencionadas é suficiente para aplicá-lo a nossos projetos.
Testing Group ou Agrupação de Testes
A agrupação de testes é uma maneira de segmentar o conjunto de tests que realizamos durante o desenvolvimento do projeto, e este framework na fica atrás neste tema.
module():
Com esta função podemos agrupar os testes unitários por meio de uma descrição ou característica que eles tenham.
Exemplo:
module(” grupo post “);
test(“primeiro teste post”,function(){
ok(true,”enviando post”);
});
test(“segundo teste post”,function(){
ok(true,”atualizando post”);
});
module(” grupo get “);
test(“primeiro teste get”,function(){
ok(true,”recibiendo get”);
});
test(“segundo teste post”,function(){
ok(true,”abrindo get”);
});
Explicação:
Ao observar como está estruturado o teste unitario, vemos dois módulos “grupo post” e “grupo get”, desta maneira se podem classificar nossos testes unitarios dentro do projeto. Um exemplo simples para explicar o assunto.
Com as características mencionadas de QUnit é muito simples que faça parte de nossos projetos e, ademais, aprendê-lo nos ajuda como programadores ou desenvolvedores a poder ter um código íntegro e livre de muitos erros.
Sem mais para o momento “Happy Testing”.
Você pode se aprofundar mais no assunto clicando aqui.