Conhecendo o Spork
A um certo tempo ouvi falar da gem Spork criada pelo Tim Happer que trabalha como um servidor drb, funciona mais ou menos como um servidor web em modo development onde todo rails e as configurações como rotas, spec_helper, factories e outras são carregadas e persistem em memória, então quando você rodar seus testes usando o servidor drb não será necessário carregar todo o framework e sim apenas suas classes e testes.
Para instalar basta declara-la em seu projeto.
gem 'spork', '~> 0.9.0.rc'
Não esqueça de rodar o comando bundle depois que alterar o Gemfile.
O Tim Happer ainda sugere rodar o comando spork --bootstrap pra adicionar a configuração no seu spec_helper.rb, porém eu prefiro editar o arquivo por mim mesmo já que é muito simples e mesmo com o comando acima você precisará editar o arquivo, veja o antes e o depois pra entender melhor.
ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| config.use_transactional_fixtures = true config.after(:all) do DatabaseCleaner.clean end end
Agora veja depois que adicionei o spork como ficou.
require 'rubygems' require 'spork' Spork.prefork do ENV["RAILS_ENV"] ||= 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| config.use_transactional_fixtures = true config.after(:all) do DatabaseCleaner.clean end end end
Altere também o environment de test pra não fazer cache de suas classes.
config.cache_classes = falsePronto a configuração está feita, basta você iniciar o spork e depois rodar seus testes.
spork
rspec spec/ --drb
Como da pra ver basta adicionar a opção --drb que o rspec já utiliza o servidor drb disponível, porém se você quiser rodar sem basta não utiliza-la que os testes continuam funcionando normalmente.
Você não precisar colocar a opção a todo momento, basta alterar o seu .rspec e tornar a flag --drb como padrão.
--colour --drb
Vale esclarecer que eu já tive problemas utilizando o spork junto com o devise que faz cache das classes que o implementam, sendo assim quando preciso alterar o meu user.rb eu paro o spork e depois inicio novamente.