Konacha


A algum tempo, quando comecei a estudar Backbone.js, li alguns artigos a respeito de como testar seu código JavaScript, na época o framework mais utilizado era o Jasmine, com um sintaxe que lembrava o RSpec rápidamente ganhou popularidade na comunidade.

Porém com a chegada do Rails 3 e o asset-pipeline, algumas coisas ficaram complicadas de serem testadas usando o jasmine, então se fez necessário o uso de ferramentas como o jasminerice.

Não faz muito tempo fui apresentado ao Koncha, nesse post vou mostrar como escrever testes usando essa ferramenta.

O que é Konacha?

Konacha

Konacha é uma Rails Engine criada para permitir testar JavaScript usando o framework Mocha e combinado com a biblioteca de assertion chai.

A melhor parte é que o konacha é feito para usar com Rails e asset-pipeline. Tornando os testes JavaScript da sua aplicação muito mais simples, sem comentar, que o Konacha lhe permite rodar seus testes em uma aplicação separada, ou então usando drivers como Poltergeist ou o Capybara-Webkit

Aplicação de exemplo

Para mostrar como usar o konacha, vamos criar uma aplicação de exemplo. A aplicação conterá somente um JavaScript para validar se um CPF é válido ou não.

Para começar vamos escrever a spec do nosso validador:

spec/javascripts/cpf_validator_spec.js

//= require cpf_validator

describe("CpfValidator", function () {
  describe("checking when a number is valid cpf", function () {
    it("returns false when a invalid numer was given", function () {
      var validator = new CpfValidator("12312312312");

      expect(validator.isValid()).to.be.false
    });

    it("returns true when a invalid numer was given", function () {
      var validator = new CpfValidator("78088398339");

      expect(validator.isValid()).to.be.true
    });
  });
});

no nosso teste fica claro que nossa api pública será bem simples, um objeto CpfValidator recebe um número e responde a um método isValid que retorna true ou false, para dizer se o número informado é válido ou não. Segue abaixo a implementação do validator:

window.CpfValidator = function (number) {
  this.number = number;

  this.isValid = function () {
    return digitsMatches();
  }

  function digitsMatches() {
    return digitMatches(9) && digitMatches(10);
  }

  function digitMatches(digit) {
    var sum = 0,
        digits = getDigits();

    for (var i = 0; i < digit; i++) {
      sum += digits[i] * (digit + 1 - i);
    }

    result = sum % 11;
    if (result < 2) {
      result = 0;
    } else {
      result = 11 - result;
    }

    return result == digits[digit];
  }

  function getDigits() {
    return number.match(/\d/gi);
  }
}

o nosso validator funciona de forma simples, ele recebe um número do cpf, e calcula se os dois digitos batem com os informados. Essa validação é da implementação da gem CPFValidation, levemente adaptada para o nosso exemplo, e é claro, convertida para JavaScript.

Executamos nosso teste para ver se nossa implementação está de acordo com nossa especificação:

bundle exec rake konacha:serve

um servidor WebBrick será iniciado, e ao acessar a url http://localhost:3500 e você verá uma página como a imagem abaixo:

Saída do teste do Konacha

que mostra que os dois cenários passaram, caso algum deles não tive passado, veriamos um simbolo vermelho ao lado da descrição do cenário. Caso queira ver o código ele está no GitHub

Moving on

Nesse pequeno exemplo foi mostrado como usar o Konacha para escrever testes de JavaScript de sua aplicação Rails. Vale ressaltar que o Konacha só funciona dentro de aplicações Rails, mas ainda sim você pode usar o Mocha e o Chai para criar seus testes de JavaScript puro.

Caso queira testar, baixo o código do exemplo, e adicione mais casos de teste, como por exemplo: validar um cpf com máscara.

blog comments powered by Disqus