Speeding up Testing
Testing a rails app can sometimes really suck… Part of it is loading the rails stack (20-30s), and part of it is how you design some aspects around test data creation (if it is expensive) and user login, etc.
A good combination to help on the technical side of things is spork and guard, as outlined here.
Once you have installed the necessary, you can use it quite simply:
<rails root>bundle exec guard start
Install
Install Spork |
Gemfile
gem 'spork' |
---|---|
create .rspec file |
$RAILS_ROOT/.rspec
--drb |
initial config |
bundle exec spork --bootstrap |
trial run |
v2$ bundle exec spork Using RSpec, Rails Preloading Rails environment Loading Spork.prefork block... Spork is ready and listening on 8989! |
Get it to work | You have to use whatever code you currently have in your startup/spec_helper stuff for cucumber or rspec. And maybe add some more code when things still aren’t quite right! Or maybe remove some… Basically, move all of your spec_helper code into the prefork block, and adjust as necessary to make errors go away. |
install Guard |
Gemfile
gem 'rb-fsevent' gem 'guard-spork' |
initial config |
guard init spork |
trial run |
bundle exec guard start |
Get it to work | You might need to add some tweaks to the Guardfile. For example, increasing the wait time, and maybe adding other files to watch over for changes.
Guardfile
# Guardfile Configuration # More info at https://github.com/guard/guard#readme guard 'spork', :wait => 50, :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('Gemfile') watch('Gemfile.lock') watch('spec/spec_helper.rb') { :rspec } watch('test/test_helper.rb') { :test_unit } watch(%r{features/support/}) { :cucumber } end |