Introdução ao Guard
Dando continuidade aos últimos artigos resolvi escrever sobre a Guard, uma gem que complementa de forma incrível o uso do spork e automatiza seus testes.
A Guard tem uma função parecida com a Watcher, que praticamente fica monitorando alterações em seus arquivos e pode executar deterinadas ações quando isso ocorre, porém ele é bem estruturado e aceita outras gems complementares pra facilitar nosso dia a dia, uma destas é a guard-rspec e a guard-spork.
Instalação
Basta adicionar a gem no gemfile do seu projeto.
group :test do gem 'guard-rspec' gem 'guard-spork' end
Observe que não precisei declarar a gem "guard" por que é uma dependência do guard-rspec e do guard-spork logo o bundler cuida disso pra gente.
Agora basta executar os comandos abaixo:
guard init spork guard init rspec
O primeiro comando ele cria o arquivo Guarfile e adiciona a configuração para o spork, já o segundo adiciona a configuração do rspec neste mesmo arquivo.
Pra iniciar o guard basta executar:
guard
Assim o guard inicia o spork automaticamente e roda todos specs e quando você salvar um arquivo ele roda o spec relacionado a este.
Algumas dicas pra configuração
No Guardfile você pode adicionar o diretório support pra ser assistido, assim quando você alterar um arquivo dentro do spec/support ele já faz o reload automatico do spork.
guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAILS_ENV' => 'test' } do watch('config/application.rb') watch('config/environment.rb') watch(%r{^config/environments/.+\.rb$}) watch(%r{^config/initializers/.+\.rb$}) watch('spec/spec_helper.rb') watch(%r{^spec/support/.+\.rb$}) end
Se você tem um projeto grande com muitos spec que demora muito pra rodar você pode configurar o Guardfile pra não rodar todos os exemplos quando o guard inicia ou quando passa todos spec de um arquivo que estava com pelo menos um failer.
guard 'rspec', :version => 2, :cli => "--drb", :all_after_pass => false, :all_on_start => false do watch(%r{^spec/.+_spec\.rb}) watch(%r{^lib/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" } … end
Desta maneira o guard não irá rodar toda suite de test a nenhum momento, porém você pode executar isso manualmente, basta apertar a tecla enter a qualquer momento no terminal que o guard está em execução que o guard se encarrega da tarefa.
Este artigo é só uma pequena introdução, recomendo que você procure mais detalhes a respeito destas gems e passe a usa-las em seu dia-a-dia.