Outro projeto open-source que também participo e gosto muito é o Shoulda. Já tentei explicar no passado o motivo de gostar tanto deste projeto, mas acho que tem muito a ver com uma questão de puro gosto.
Pois bem, acabou de ser liberada a versão 2.0.2 do Shoulda e a principal novidade é que agora ele funciona 100% como um gem. Além disso, novas macros foram acrescentadas, bugs foram corrigidos e algumas funcionalidades foram removidas.
Para utilizar o Shoulda em seu projeto Rails 2.1+ a melhor forma é acrescentar o seguinte código no seu arquivo config/environment.rb:
Rails::Initializer.run do |config|
config.gem 'thoughtbot-shoulda', :lib => 'shoulda/rails',
:source => "http://gems.github.com"
end
Depois basta executar no terminal:
rake gems:install
rake gems:unpack
Entre as novidades, tivemos melhorias em macros existentes que prometem agilizar ainda mais a criação de testes, tais como o acréscimo das opções :equals e :class na macro should_assign_to. Com estas novas implementações fica fácil testar se o objeto devolvido é do tipo desejado ou mesmo igual a um objeto especifico.
should_assign_to :user, :equals => "@user", :class => User
A macro should_have_one também recebeu a opção :dependent:
should_have_one :address, :dependent => :destroy
Agora falando apenas de novidades, temos as novas macros should_change, should_not_change, should_filter_params, should_render_with_layout, should_render_without_layout, should_route, should_respond_with_content_type, should_return_from_session e o muito útil before_should.
Mais detalhes sobre o funcionamento de todas estas macros podem ser encontrados na documentação do projeto.
Algo interessante que também foi acrescentado ao projeto é a carga automática de macros customizadas. Caso você deseje criar suas próprias macros, basta criar uma pasta RAILS_ROOT/test/shoulda_macros e jogar lá dentro os arquivos com estas macros.
Gems e plugins também podem se beneficiar dessa vantagem. Se em qualquer um deles houver uma pasta shoulda_macros na raiz, todos os arquivos dentro da pasta também serão carregados automaticamente.
A única controvérsia desta versão, foi a remoção do método should_be_restful. Na verdade ele chegou a ser removido por alguns dias, mas depois voltou com uma mensagem de alerta avisando que em breve ele será removido definitivamente. Isto se dá pelo fato de que este método faz muita coisa de forma automática e não permite uma fácil localização do ponto onde um erro ocorre.
Um outro projeto também foi iniciado em paralelo ao desenvolvimento do Shoulda. O Woulda promete ser um repositório de macros e recursos que não cabem ao Shoulda, como macros especificas para testar alguns gems/plugins famosos.
Para quem está começando a brincar com o Shoulda segue uma lista de recursos interessantes:
- Screencast BDD leve com Shoulda – testando modelos ActiveRecord
- Shoulda x RSpec: Cuidado nas comparações
- Shoulda Testing Cheat Sheet
- Running single shoulda tests from the command line
- Making Tests Easy on the Fingers and Eyes
O Bundle para o TextMate que estou mantendo junto com o Dr. Nic no GitHub já está atualizado com todos os recursos da versão 2.0.2.
Como alguns já viram no último podcast eu costumo defender muito os projetos e sistemas que gosto. O GitHub pode não ter a importancia que o RubyForge “teve” para a comunidade Ruby no mundo, mas acredito seriamente no valor deste projeto e aposto minhas fichas nele.
O fato dele ser um projeto comercial só aumenta ainda mais minha confiança, porque ele é um projeto opensource-like com a diferença de ser mantido não somente pela boa vontade dos desenvolvedores, mas sim por dinheiro, e isto é muito bom porque estimula a “boa vontade”, se é que vocês me entendem.
Além disso o GitHub evoluiu os projetos opensource além do que o RubyForge conseguiu, tornou muito mais fácil contribuir para um projeto, criar forks, entrar em contato com desenvolvedores, e tudo de uma forma que estimula o social.
Outro projeto que muito me agrada é o Shoulda, e vou explicar o motivo disto. O Sholda diferente do RSpec, por exemplo, foi feito para o Rails (embora você possa usá-lo em outros tipos de projetos isto não faz muito sentido) e isto dá ao projeto uma liberdade que não pode ser aplicada ao RSPec que precisa ser mais genérico.
Claro que existem iniciativas semelhantes aplicadas ao RSpec, mas nenhuma é tão madura.
Outra vantagem é que o Shoulda não precisa alterar nada em seu projeto Rails, já que ele trabalha em cima do Test::Unit que é o framework padrão para testes no Rails. E se você já costuma criar testes neste framework, a curva de aprendizado é perto de zero.
E agora a terceira grande vantagem é a possibilidade de criar macros para testes. Funciona mais ou menos assim: Você cria um plugin que adiciona uma certa funcionalidade a um objeto do ActiveRecord, então você cria uma macro de testes para isto e a coloca dentro de uma pasta shoulda_macros na raiz do seu gem ou plugin. Assim, os usuários do seu projeto só precisam incluir uma chamada de método nos testes dos modelos que implementarem estas novas funcionalidades e tudo estará seguro.
Por exemplo, se você estiver usando o plugin Paperclip, basta adicionar a seguinte linha no arquivo de teste do modelo para garantir que tudo vai funcionar bem:
end
Sou tão fõ do projeto que mantenho, junto com o Dr. Nic, os Bundles do TextMate para o Shoulda e posso garantir que ele está completo. Já enviei alguns patchs para o projeto principal também.
Se tem coisas que eu não sou é preciosista ou saudosita. Sou adépto ao novo, e quando considero que algo novo é melhor do que o antigo não tenho medo de mudar. Não é porque algo me serviu durante muitos anos que devo continuar usando-o o resto da vida, se fosse assim eu não teria comprado um travesseiro novo, nem um macbook, nem uma TV nova, nem um…