QUnit - Testes Unitários em Javascript

English version of this article: http://geekswithblogs.net/guilhermecardoso/archive/2011/10/15/qunit---client-side-unit-testing-with-tdd.aspx
Link Github: https://github.com/guilhermegeek/QUnitSample

Como tenho o hábito de escrever testes unitários para o código que escrevo decidi pesquisar um bocado sobre este tema mas em relação a client side. 
De algumas frameworks que vi aquela que escolhi foi o QUnit. É utilizado pela equipa da jQuery para testar os códigos deles, e sinceramente foi aquela que mais me pareceu fácil de configurar e é-me familiar aos testes que tenho escrito com o NUnit (para C#: http://www.nunit.org)..

Neste artigo vou mostrar um exemplo básico de como pode ser usado.

Para utilizar o QUnit é preciso recorrer á framework jQuery: http://docs.jquery.com/Downloading_jQuery
O QUnit está disponível no GitHub: https://github.com/jquery/qunit

Começamos por declarar os scripts na head da página. Podemos usar a folha de estilo disponibilizada pelo pessoal do QUnit. É apenas um ficheiro css e o código usado é limpo e simples de perceber.

<link href="/Styles/qunit.css" rel="Stylesheet" type="text/css" />
<script src="/Scripts/jquery-1.6.1.min.js" type="text/javascript"></script>
<script src="/Scripts/qunit.js" type="text/javascript"></script>  

A seguir vamos construir um objecto para retornar o estado do erro e a mensagem. Algo assim:

function OutputJS() {
      this.Mensagem = null;
      this.Codigo = null;
}

Isto é opcional claro. Eu apenas uso este objecto porque facilita bastante o meu trabalho quando faço a verificação do estado de erro.

Para acabar as configurações de defeito do QUnit só nos falta definir os elementos html onde ele vai mostrar os estados dos testes:

<h1 id="qunit-header">Testes Unitários</h1>  
<h2 id="qunit-banner"></h2>  
<h2 id="qunit-userAgent"></h2>  
<ol id="qunit-tests">

Feito isto vamos escrever o nosso primeiro teste!
Seguindo o conceito de TDD (a início o teste é escrito para dar erro, e só depois escrevemos o código que vai ser testado e então verificamos se o teste deixa de dar erro) vamos escrever este teste:

function Deve_Validar_Codigo(codigoAluno) {
        resultado.Codigo = false;
        resultado.Mensagem = "O código de aluno deverá ter no mínimo 4 caracteres.";
        return resultado;
}

Como podem ver o teste vai devolver falso (o tal conceito de TDD). 
É agora que o QUnit entra. Como se trata de Javascript, a forma mais fácil de correr o teste é no evento $(document).ready() (quando a página é carregada). No entanto podem associar isto a um evento de um botão com um select onde tenham todos os testes que querem testar por exemplo.

<script type="text/javascript">
    $(document).ready(function () {
        module("Validação");
        test("Validar Código de Aluno", function () {
            var teste = Deve_Validar_Codigo("CD122");
            ok(teste.Codigo, teste.Mensagem);
        });
    }); 
</script>

module: permite-nos separar os testes em módulos (categorias)
test: nome dado ao teste
ok(): um dos vários tipos de assertions disponíveis do QUnit para os testes.O ok() espera que o primeiro parâmetro tenha o valor boleano true, e caso não tenha mostra a mensagem de erro do segundo parâmetro.

O teste Deve_Validar_Codigo() esta a devolver o objecto OutputJS que tem as propriedades Codigo e Mensagem. Assim, se o teste.Codigo for falso é mostrada a teste.Mensagem. É por isso que digo que utilizar um objecto deste tipo é bastante útil!

Para correr o teste basta abrir a página (onde colamos o código do test("Validar Código de Aluno", function ()) e o resultado vai ser este:

Como era de esperar o nosso teste deu erro. Vamos então alterar o método Deve_Validar_Codigo() para conseguirmos validar o código de aluno:

function Deve_Validar_Codigo(codigoAluno) {
    var resultado = new OutputJS();
    if (codigoAluno.length < 4) {
        resultado.Codigo = false;
        resultado.Mensagem = "O código de aluno deverá ter no mínimo 4 caracteres.";
    }
    else {
        resultado.Codigo = true;
        resultado.Mensagem = "Código de aluno validado com sucesso";
    }
    return resultado;
}

Se voltarmos a correr o teste o resultado já vai ser este:

E voilá!

A documentação do QUnit pode ser encontrada no site do JQuery, e lá conseguem ver mais tipos de assertions e outros tipos de opções úteis como testes assíncronos: http://docs.jquery.com/Qunit

Published 3-6-2011 1:59 por Guilherme Cardoso
Filed under: ,

Leave a Comment

(requerido) 
(requerido) 
 
(opcional)
(requerido) 
If you can't read this number refresh your screen
Enter the numbers above: