Guard + Spork on Rails 4 with RSpec and Cucumber
Guard with Spork for RSpec, Cucumber and Test::Unit
It can be a bit of a pain if you want to use guard and spork, especially for the first time. There are many different gems available and not all work with every configuration.
We use this and it works without problems for us. If you use Mongoid, see the extra instructions at the end.
Gems
group :development, :test do
gem 'guard-rspec'
gem 'guard-livereload'
gem 'spork-rails', github: 'sporkrb/spork-rails' # rubygems version not rails 4 compatible
gem 'guard-spork'
gem 'childprocess'
end
group :test do
gem 'rspec-rails'
gem 'selenium-webdriver', '2.0.0'
gem 'capybara', '2.1.0'
gem 'factory_girl_rails'
gem 'cucumber', '1.2.5' # Spork not supported as of Cucumber 1.3.0, need to use 1.2.5
gem 'cucumber-rails', :require => false
gem 'database_cleaner'
end
Install instruction
$ bundle update
$ bundle install
$ rails generate rspec:install
$ guard init rspec
Modify ./Guardfile
guard 'rspec', after_all_pass: false, cli: '--drb' do
...
Set up spork
$ bundle spork --bootstrap
Set up Spork in /spec/spec_helper.rb
Spork.prefork do
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
end
Setup guard with spork
$ guard init spork
Install Cucumber
$ rails generate cucumber:install --spork
Mongoid
For usage with mongoid, modify /spec/spec_helper.rb.
Remove these lines:
ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
..
config.fixture_path = "#{::Rails.root}/spec/fixtures"
..
config.use_transactional_fixtures = true
And add to /spec/spec_helper.rb, below Rspec.configure
config.before(:suite) do
DatabaseCleaner[:mongoid].strategy = :truncation
end
config.before(:each) do
DatabaseCleaner[:mongoid].start
end
config.after(:each) do
DatabaseCleaner[:mongoid].clean
end
Written by Job van der Voort
Related protips
7 Responses
Gem syntax error, you are missing the "do" from the first line.
Also noticed that the gem for rspec is missing. This might confuse people starting from afresh.
Thanks for the tips! Will change it right away :-)
Also, I think "bundle spork --bootstrap" should bve "bundle exec spork --bootstrap"
Thanks for the very informative and useful blog post. I did run into one problem. It seems that there's problems with zip/zip:
rake --tasks
rake aborted!
LoadError: cannot load such file -- zip/zip
/vagrant/config/application.rb:7:in <top (required)>'
/vagrant/Rakefile:4:in
<top (required)>'
(See full trace by running task with --trace)
I fixed this using this gem:
https://github.com/orien/zip-zip
Thanks again.
I've been chasing my tail all day trying to figure out the best way to implement these tools and speed up my tests... it's a total mess at this point :(
Nowadays it's best to just use Spring, which comes bundled with Rails 4.1 and up, rather than use guard. Spring is easier to use.