Archive

Author Archive

Melhorando os testes dos seus models do Rails 3 com RSpec 2 e Remarkable ou Shoulda

January 26th, 2011 3 comments

Uma das coisas que mais me incomoda quando estou fazendo os meus testes,  é escrever testes para verificar os campos obrigatórios. Eu gosto muito de usar o RSpec e aqui está um exemplo comum de código que testa um modelo ‘Usuario’ que tem os atributos ‘nome’ e ‘idade’ obrigatórios:

describe Usuario do
  before :all do
    @obrigatorios = {nome: 'David Paniz', idade: 25}
  end
  it "deve ter Nome obrigatório" do
    u = Usuario.new(@obrigatorios.merge(nome: nil))
    u.should_not be_valid
    u.should have_at_least(1).error_on(:nome)
  end
  it "deve ter Idade obrigatório" do
    u = Usuario.new(@obrigatorios.merge(idade: nil))
    u.should_not be_valid
    u.should have_at_least(1).error_on(:idade)
  end
  it "Deve ser valido com todos os campos obrigatório" do
    u = Usuario.new(@obrigatorios)
    u.should be_valid
  end
end

Sempre que escrevo um código desses sinto que estou testando o Rails e não o meu model. No fundo a única coisa que tenho que testar é se eu coloquei a linha do validates_presence_of :atributo. O resto do trabalho (deixar o valid? falso e criar o error no campo) é problema do Rails e não do meu modelo. Além desse sensação estranha de testar a coisa errada esse é o tipo de código que eu escrevo e na hora percebo que a abordagem não é nada DRY.

Dei uma olhada em 2 opções para melhorar a abordagem dos testes, o Shoulda e o Remarkable.

Remarkable

Para instalar o remarkable com o Rails 3 o RSpec 2 precisamos usar a versão 4 que ainda está em alpha, nesse instante 4.0.0.alpha4.
Adicione ao seu Gemfile as dependências:

gem "rspec"
gem "rspec-rails"
gem "remarkable_activerecord", '4.0.0.alpha4'

Usando o Remakable você ganha alguns matcher especiais para verificar apenas se você realmente colocou a validação do atributo no seu model, por exemplo o matcher validate_presence_of. O código de teste equivalente ao de cima ficaria assim:

describe Usuario do
  it {should validate_presence_of :nome }
  it {should validate_presence_of :idade }
end

Para que o RSpec reconheça esses matchers do Remakable é preciso um último detalhe de configuração que é adicionar um require do remarkable no seu spec_helper.rb logo abaixo do require ‘rspec/rails’

# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'remarkable/active_record'

Shoulda

O shoulda ficou muito famoso sendo utilizado com o TestUnit, mas existe um sub-projeto dele que é o ‘shoulda-matchers’, atualmente na versão 1.0.0.beta1, que é a gem que vamos usar com o Rails 3 o RSpec 2. Adicione ao seu Gemfile as dependências:

gem "rspec"
gem "rspec-rails"
gem "shoulda-matchers"

Curiosamente para esses casos mais básicos o matcher do Shoulda é idêntico ao do Remakable e o código de teste fica idêntico ao dele:

describe Usuario do
  it {should validate_presence_of :nome }
  it {should validate_presence_of :idade }
end

Dessa vez não é preciso nenhuma configuração extra, basta apenas executar os testes e:  Seja uma pessoa mais feliz!

Conclusão

Ambas são ótimas opções para dar uma bombada nos seus testes, cada um com suas vantagens e desvantagens. Recomendo uma lida nas respectivas documentações para conhecer mais de cada um deles e escolher o que melhor supre suas necessidades.

Categories: Rails, Testes Tags: , , ,

Meu ambiente de desenvolvimento em 7 itens

December 29th, 2010 3 comments

Fui convidado para a brincadeira pelo Adriano Almeida e pelo Anderson Leite e aí vamos nós:

Máquina / Sistema Operacional

Minha máquina “oficial” é meu macbook white 13″ que já está comigo desde 2008, mas com 4Gb e com upgrade pro Snow Leopard.

Editor

Pra arquivos texto no geral e RoR tenho e uso bastante o TextMate. Já dei algumas chances pro Vim, mas ainda não me adaptei perfeitamente, recentemente decidi lhe dar outra e parece que agora vou ficar com ele mesmo. Estou usando as configurações do Akita e o Bundle de afc que o Adriano fez. (afc é o formato que usamos pra escrever as apostilas da Caelum – Quem já teve curiosidade, conheça o Tubaina).
Pra programar java não abro mão do Eclipse!

Terminal

O bom e velho bash mesmo. Algumas poucas frescuras no ~/.bash_profile pra adicionar cores e personalizar o PS1, mas nada de mais. Normalmente meu terminal está uma zona com pelo menos umas 5 ou 6 abas abertas. Costumo ter umas 2 ou 3 por projeto (server, testes e “outros”) e quase sempre tenho abas de mais de projeto aberta.

Browser

Hoje meu browser principal é o Chrome, tanto pro dia-a-dia quanto pra desenvolvimento, mas tenho e uso o FF e o Safari. Assim como meu Terminal, meu browser também é uma salada de abas, mas piorada. Aqui tenho umas abas que ficam semanas abertas aguardando para serem lidas.

Software

QuickSilver, Adium, Skype, TweetDeck, DropBox e Keynote, além dos indispensáveis serviços do Google: GMail, Calendar e Docs.

Source-code

Felizmente tenho usado apenas o git hoje em dia.

Música

Quando preciso de muita concentração coloco meus fones e um bom Power Metal pra me isolar do mundo. Independente disso, gosto bastante de ouvir música enquanto programo, mas dentro da Caelum acabo ficando com o volume mais baixo ou com o fone em apenas 1 dos ouvidos pra ouvir as discussões. Um ponto curioso sobre as músicas comigo é que não posso ouvir uma música que me empolga e eu não conheço ela perfeitamente (saber tocar e/ou cantar). Ou escuto uma música que domino ou uma música neutra, se não ela passa a atrapalhar ao invés de ajudar. Para conhecer meu gosto musical recomendo uma passada no meu perfil no Last.fm

Os meus convidados são: Todos autores do Vida Geek

Categories: Uncategorized Tags:

Eventos do segundo semestre

November 3rd, 2010 No comments

QCon SP

Em setembro aconteceu um dos eventos mais importantes de TI que já passou no nosso país. Pela primeira vez no Brasil ocorreu uma QCon e tive a felicidade de estar presente. Dessa vez não fui oficialmente um palestrante, mas fui convidado para ser o host de uma das tracks das lightning talks que vou comentar no final do post.

O evento não foi importante apenas pelo nome QCon, mas sem dúvidas tivemos um evento verdadeiramente de alto nível, tanto os palestrantes brasileiros quanto os internacionais fizeram ótimas apresentações. Na MINHA opinião, entre as palestras que assisti, os destaque vão para o Nick Kallen, Charles Nutter e a palestra em dupla do Alexandre Porcelli e Gleicon Moraes.

Resumindo o evento em poucas palavras me parece que a preocupação geral dos arquitetos hoje é escalabilidade. Linguagens funcionais, filas, denormalização, nosql, cloud e outros meios/técnicas para melhorar a responsividade de nossas aplicações foram assuntos muito comentados por todas as tracks que passei.

Voltando as lightning talks, tivemos ótimas apresentações! Como já falei fui o host de uma das tracks e além da minha própria talk contei com as apresentações de: Alberto Leal, Lucas Pérez, Rafael Viveiros, Cecilia Fernandes, André Luiz R. Silva, Hugo Baraúna e um pequeno oi do pessoal do GURU-SP no final. Muito obrigado e parabéns para todos vocês.

Rails Rumble

No meio de outubro aconteceu a 3ª edição do Rails Rumble, esse ano não deixei passar e, pela primeira vez, participei da competição. Meu time acabou não chegando na final, numa breve retrospectiva levantamos alguns pontos bobos onde falhamos, como não ter pensado num lugar pra tomar banho… (Sim, eu fiquei mais de 48h sem banho). Quem sabe ano que vem não aparecemos na final?! Pelo menos nossa app nos fez conhecer novos frameworks e nos trouxe algumas ideias de negócio que jamais imaginaríamos.

RubyConf Brasil 2010

O antigo Rails Summit Latin America agora está sob a franquia Ruby Conf, pela primeira vez com o nome novo, conseguiram trazer palestrantes ainda mais impressionantes do que os do ano passado, com destaque para os commiters do Rails Jose Valim, Aaron Patterson e Yehuda Katz, além do Ola Bini e novamente o Charles Nutter. Mais um evento de altíssima qualidade levando o Brasil, cada vez mais, para um patamar de igualdade com outros países considerados polos tecnológicos.

Resumindo o evento em poucas palavras, acredito que as boas práticas são chave para o momento que a comunidade está passando, foram apresentadas várias melhorias no Rails e outros frameworks auxiliares e especialmente no ruby 1.9. Acredito que o interesse de todos agora é que toda a força de vontade que a comunidade tem, relembrada pelo Fabio Akita na abertura do evento, seja catalisada para gerar valor real.

Encontro Ágil 2010

Pra finalizar os eventos do post, um evento que ainda não aconteceu. No próximo sábado, dia 06/11 vai acontecer o Encontro Ágil 2010, num formato completamente inovador, com muitos jogos, dojos e nada de palestras tradicionais, como eles anunciaram, um evento da comunidade para a comunidade, onde terei o prazer de falar sobre dívida técnica e como evita-la numa lightning talk que em breve estará disponível no meu Slideshare

Finalmente aqui estão slides da minha lightning talk na QCon:

Oxente Rails 2010

August 11th, 2010 No comments

É com muito orgulho e satisfação que vou escrever sobre minha participação nesse evento maravilhoso! Antes de falar sobre minha palestra quero deixar aqui meus sinceros agradecimentos ao pessoal da organização. Esse evento foi provavelmente o melhor evento do ano até agora.

Infelizmente eu e o Adriano Almeida tivemos um tempo bem limitado pra falar sobre um assunto tão amplo, mas acredito que alcançamos nosso objetivo e fizemos quem estava presente se questionar sobre as escolhas de tecnologia para persistência. Durante nossos 30 min falamos sobre o que é NOSQL, comentamos sobre a estrutura de alguns tipos de banco de dados não relacionais e finalmente apresentamos o Neo4j como uma implementação de Graph Database. Terminamos mostrando como integrar com rails através do Binding JRuby ou através da API REST utilizando o Restfulie para isso.
Slides da apresentação:

Categories: Uncategorized Tags: