Konacha
December 04, 2012
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 é 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:
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.